我從輸入文件填充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