2015-08-19 44 views
1

我想將我的二維數組中的所有值設置爲0,然後打印所有分數以確保它們是正確的。設置二維整數陣列值全部爲0在C

struct Game { 
    int GameScoresHome[10][10]; 
}; 

int main() { 
    struct Game game; 

    memset(game.GameScoresHome, 0, sizeof game.GameScoresHome); 
    for (int x=0;x<100;x++) { 
     int y = floor(x/10); 
     printf("%d ",game.GameScoresHome[x][y]); 
    } 
    return 0; 
} 

的電流輸出爲:

0 0 0 0 0 0 0 0 0 0 0 0 822083893 32767 32767 32767 32767 32767 32767 1651067951 1634028652 1345283180 1702057263 1701080931 2054842477 1866870631 1885417061 1647262318 1146113364 896624241 1280918623 1919052108 1819042146 1818850626 1634956149 1852133983 1264923239 792545364 1666723698 1836345960 1163089152 1949263220 1919250021 1868774725 1213481296 796026224 1785230711 1650803759 792546380 1213481296 1868781615 1752003690 6780258 1497628720 778396783 1920232291 792545364 1666723698 1836345960 1735746149 796026224 1785230711 1650803759 0 0 3 0 7 0 -2147482624 0 0 0 0 0 0 0 0 0 0 233472 1869045599 48 1868783455 5312 1633967967 3480 1818320735 304 1919115103 0 1852796269 0 115 0 72 0 1227 0 0 

第11個0,因爲它們應該是那麼一切都錯了。這是怎麼回事?

+3

使用'printf(「%d」,game.GameScoresHome [x%10] [y]);'' – chux

回答

0

在你的代碼

for (int x=0;x<100;x++) { 
     int y = floor(x/10); 
     printf("%d ",game.GameScoresHome[x][y]); 
    } 

x值是走出去的束縛。也許你想利用x一個%10值並更改索引位置,像

printf("%d ",game.GameScoresHome[y][x%10]); 

,或者使用嵌套循環分別維持兩個指標。

1

您正在訪問陣列外的內存。

x從0迭代變量到99

for (int x=0;x<100;x++) 

但是你的數組只有10行。

int GameScoresHome[10][10]; 

一種修復方法是使用簡單的嵌套循環。

for (int x=0;x<10;x++) { 
    for (int y=0;y<10;y++) { 
     printf("%d ",game.GameScoresHome[x][y]); 
    } 
} 

嵌套循環還可以很容易地在每行之後包含換行符。

for (int x=0;x<10;x++) { 
    for (int y=0;y<10;y++) { 
     printf("%d ",game.GameScoresHome[x][y]); 
    } 
    printf("\n"); 
} 
0

收件環路簡單

for (int x = 0; x < 100; x++) { 
    printf("%d ",game.GameScoresHome[x/10][x % 10]); 
} 

for (int x = 0; x < 100; x++) { 
    printf("%d ",game.GameScoresHome[x/10][x % 10]); 
    if (x % 10 == 9) printf("\n"); 
} 

至於你的循環,則x被從0變爲使用X如在第一索引高達100和作爲結果聲明

printf("%d ",game.GameScoresHome[x][y]); 
           ^^^ 

is inv alid。而y計算不正確。

0

怎麼辦?

struct Game game = {.GameScoresHome = {0}}; 
for (int x=0;x<10;x++) { 
    for (int y=0;y<10;y++) { 
     printf("%d ",game.GameScoresHome[x][y]); 
    } 
    printf("\n"); 
}