嗨,我当前正在用 C 编程运行代码,它不断以非零状态退出。
该代码用于数独游戏,我本质上想做的是生成随机的 9x9 2D 数组。随机生成它后,我有一个函数检查网格是否是有效网格。我不知道为什么我会得到非零状态。我随机生成数字的方法可能有问题,但我不确定。感谢您的帮助,谢谢。
#include "stdio.h"
#include <time.h>
#include <stdlib.h>
int check(int list[][9]){
// Disable stdout buffering
setvbuf(stdout, NULL, _IONBF, 0);
int i, j, x, y, ans = 0, sum = 0, sum2 = 0, sum3 = 0;
for(i=0;i<9;i++){ //This nested for loop checks if columns and rows are correct
sum = 0;
sum2 = 0;
for(j=0;j<9;j++){
sum += list[i][j];
sum2 += list[j][i];
if((j == 8) && ((sum != 45) || (sum2 != 45)))
ans = 1;
}
}
for(x=0;x<3;x++){ //This nested for loop checks if boxes are right
for(y=0;y<3;y++){
sum3=0;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
sum3+= list[i+(3*y)][j+(3*x)];
if((i==2 && j==2) && (sum3 != 45))
ans = 1;
}
}
}
}
return ans;
}
int main(void){
// Disable stdout buffering
setvbuf(stdout, NULL, _IONBF, 0);
int list[9][9] = {0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0};
int i, j, r;
for(;;i++){
for(i=0; i<9; i++){
for(j=0; j<9; j++){
srand(time(NULL));
r = rand() % ((9 + 1 - 1) + 1);
list[i][j] = r;
}
}
if(check(list[i][j]) == 0)
break;
}
printf("done");
return 0;
}
最佳答案
函数
check()
需要一个int[][9]
数组,并且您使用一个数字来调用它:对的调用check(list[i][j])
应该是check(list)
。在语句
for (;;i++)
中,i
的值未定义。您可能希望将
srand()
移到循环之外——初始化应该只进行一次。(9+1-1)+1
是10
... 的复杂书写方式
关于c - 我的 C 程序以非零状态退出,我不知道为什么。目前正在 repl.it 中运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686975/