我正在编写棋盘游戏,我需要将字符值分配给二维数组。为此,我使用了一个嵌套的 for 循环,其中 i 作为行索引,j 作为列索引。对于 4x4 维度 (n=4),循环工作正常,直到第二行。在 codelite 上使用调试器,我注意到 j 的值并没有像它应该的那样从 0 增加到 1,而是增加到 5,560,570,从而中断了循环。我还注意到,当使用大于 4 的维度时,程序根本无法显示任何内容。这是内存错误吗?我很困惑,也向其他多人展示了这一点。
int main(void){
int n;
char board[n][26];
printf("Enter the board dimension: ");
scanf("%d", &n);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if((i == (n/2)-1 && j == (n/2)-1) || (i == (n/2) && j == (n/2))){
board[i][j] = 'W';
}
else if((i == (n/2) && j == (n/2)-1) || (i == (n/2)-1 && j == (n/2))){
board[i][j] = 'B';
}
else{
board[i][j] = 'U';
}
}
}
最佳答案
看来您在设置n
之前,在board
的声明中使用了它。因为这是未定义的行为,所以绝对允许发生任何事情;在这种情况下,这会破坏其他变量的值。
要解决此问题,您可能应该等到在 scanf
中初始化 n
之后声明 board
,如下所示:
int main(void) {
int n;
printf("Enter the board dimension: ");
scanf("%d", &n);
char board[n][26];
...
}
正如评论中指出的那样,如果 n > 26
,这仍然会导致问题,并且对于 n != 26
可能会造成浪费。由于数组在 C 中的工作方式,解决这个问题可能需要重新考虑板的存储方式。
关于c - 嵌套 for 循环的索引值达到 500 万 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55035241/