有人可以向我解释这段代码有什么问题吗?我的董事会不应该被填补吗? (我上面有两个函数,一个用于生成随机数,另一个用于打印数组)
功能:
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--;
}
}
答案 0 :(得分:1)
假设getRand
返回0到9之间的数字,一旦循环迭代一次,O
中就会有array[g][x]
。
在下一次迭代中,ran
未发生变化,因此g
和x
与之前的值相同。现在,array[g][x]
包含O
,因此else语句执行,并撤消cntr2++
,它将保留在值1
,从而导致无限循环。