我从输入文件填充10 x 10个字符的网格。 我需要检查如果电网是正方形(即,具有N×N个字符,其中N < = 10)c - 在二维数组中检查null
输入文件是这样的:
pitk
olpe
pkey
tope
当我打印在gdb网格,我得到以下结果:
$1 = {"pitk\000\000\000\000\366h",
"olpe\000\000\001\000\000",
"pkey\000\000\000\000\000",
"tope\000\000\000\000\000",
"\000\344\241\367\377\177\000\000", <incomplete sequence \336>,
"\000\377\377\177\000\000\037\355\336", <incomplete sequence \367>,
"\000\177\000\000\000\000\000\000\000",
"\000\000\000\000\000\000\000\000\000",
"\000\000\000\000\000\000\000\000\r\020",
"\000\000\000\000\000\000\000\000\000"}
我的主要功能来检查,如果网格是有效的部分是:
bool check = (checknxn(grid));
if(check == false) {
fprintf(stderr, "Invalid Input!\n");
exit(0);
}
的checknxn功能:
bool checknxn(char grid[10][10]) {
int columns = 0;
for(int i=0;i<10;i++) {
if(grid[0][i]!=NULL)
columns++;
else {
break;
}
}
for(int i=1;i<10;i++) {
for(int j=columns;j<10;j++) {
if(grid[i][j]!=NULL)
return false;
}
}
int rows = 0;
for(int i=0;i<10;i++) {
if(grid[i][0]!=NULL)
rows++;
else {
break;
}
}
if (!(rows == columns))
return false;
for(int i=0;i<rows;i++) {
for(int j=0;j<columns;j++) {
if(grid[i][j]==NULL) {
return false;
}
}
}
return true;
}
这个返回false,我的程序退出,即使在这种情况下,输入电网是有效的。
我不明白为什么在这种情况下checknxn函数返回false。
UPDATE:这是我如何初始化我网:
FILE *file1 = fopen(argv[1], "r"); // "r" for read
char grid[10][10];
char c;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
fscanf(file1,"%c", &c);
if (c == '\n') {
grid[i][j] = '\0';
break;
}
if (c == ' ') {
grid[i][j] = '\0';
continue;
}
if (c == '\0') {
grid[i][j] = '\0';
continue;
}
else {
grid[i][j] = c;
}
}
}
您是否试过调试器(甚至是printf?)。给你的输入,我可以看到它为什么失败。也许首先将'i'和'j'重命名为'row'和'col',使它更容易遵循... – John3136
@ John3136我已经使用我的调试器来检查网格的值,但没有使用它在checknxn函数上,因为我不确定如何在辅助函数上使用gdb。 – RockAndaHardPlace
只是进入它。 – John3136