为什么会产生无限循环(C,While循环)

时间:2013-04-06 20:49:28

标签: c loops while-loop infinite

我正在为我的班级做一个程序,我需要在开始之前将数组'decade'的所有值设置为-1。我尝试了这个(和for循环中的版本)它只是让我进入一个无限循环!有人可以解释为什么会这样,以及我如何解决它?

代码:

int decade[9][9], i = 0, k = 0;
while (i<10) {
    while (k<10) {
        printf("i is %d, k is %d\n",i,k);
        decade[i][k] = -1;
        k++;
    }
    k=0;
    i++;
}

先谢谢!

打印出来: What it prints out

对于任何需要未来答案的人来说,将十年称为“十年[10] [10]”而不是“十年[9] [9]”,或者无论如何定义。

6 个答案:

答案 0 :(得分:6)

当您声明大小为9的数组时,它的索引从08。你转到9将覆盖内存。这是未定义的行为,可能会导致任何数量的微妙但有缺陷的行为。

答案 1 :(得分:4)

我不知道如何定义“十年” - 但如果定义不正确,和/或错误的大小,你可能得到缓冲区溢出可以导致错误的内存设置为“-1” - 即“i”或“k”变量可能被覆盖。

答案 2 :(得分:1)

int decade[9][9], i = 0, k = 0;
while (i<10) {
    while (k<10) {
        printf("i is %d, k is %d\n",i,k);
        decade[i][k] = -1;
        k++;
    }
    k=0;
    i++;
}

不正确,因为你是从0到9(10个元素)的迭代次数

这段代码是正确的:

int decade[9][9], i = 0, k = 0;
while (i<9) {
   k = 0;

   while (k<9) {
      printf("i is %d, k is %d\n",i,k);
      decade[i][k] = -1;
      k++;
   }

i++;
}

请注意,在再次循环之前,将k设置为零

还有其他可能循环,例如for循环,你使用while循环实际上不用于计数。

答案 3 :(得分:1)

你的循环必须是0到8(十进制数组长度为9):

while (i<9) {
    while (k<9) {
       /* ... */
    }
}

答案 4 :(得分:0)

“9x9”中的尺寸 - 您正在初始化10x10。设置为十年[10] [10],使用(&lt; 8)或do(x <= 9)

答案 5 :(得分:0)

Index out of bound exception for your code. Try this one instead.

   int dimSize = 10;
    int decade[dimSize][dimSize], i = 0, k = 0;
    while (i<dimSize) {
        while (k<dimSize) {
            printf("i is %d, k is %d\n",i,k);
            decade[i][k] = -1;
            k++;
        }
        k=0;
        i++;
    }