我无法理解为什么这个循环会冻结

时间:2015-10-24 17:17:32

标签: c arrays loops if-statement multidimensional-array

有人可以向我解释这段代码有什么问题吗?我的董事会不应该被填补吗? (我上面有两个函数,一个用于生成随机数,另一个用于打印数组)

功能:

void map(char a[3][3]){

    int row, column;

    for(row=0;row<3;row++){

        for(column=0;column<3;column++){

            printf ("%c       ", a[row][column]);

        }
        printf("\n \n \n \n \n");
}
}
float getRand() {

    return ((rand() / (RAND_MAX+1.0))*9)+1;
}

主:

srand( time(NULL) );
    int r,c,ui,cntr,cntr2,ran,g,x;
    char kb, aray[3][3]={{'.','.','.'},{'.','.','.'},{'.','.','.'}};
    getRand();
    ran=getRand();

for(cntr2=0;cntr2<5;cntr2++){
                g=ran/3;
                x=ran%3;
                if(aray[g][x]=='.'){
                    aray[g][x]='O';
                    system("cls");
                    map(aray);
                }
                else{
                    cntr2--;
                }

        }

1 个答案:

答案 0 :(得分:1)

假设getRand返回0到9之间的数字,一旦循环迭代一次,O中就会有array[g][x]

在下一次迭代中,ran未发生变化,因此gx与之前的值相同。现在,array[g][x]包含O,因此else语句执行,并撤消cntr2++,它将保留在值1,从而导致无限循环。