在C中将2D整数数组值全部设置为0

时间:2015-08-19 16:45:28

标签: c arrays integer

我正在尝试将2D数组中的所有值设置为0,然后打印所有分数以确保它们是正确的。

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个零是应该的,然后一切都会出错。发生了什么事?

4 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:0)

在您的代码中

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

x值超出范围。也许您希望%10值为x并更改索引位置,例如

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

或者,使用嵌套循环分别维护两个索引。

答案 2 :(得分: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变为100,结果使用x作为语句中的第一个索引

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

无效。并且y的计算不正确。

答案 3 :(得分: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");
}
相关问题