Я заполняю сетку символов 10 x 10 из входного файла. мне нужно проверить, если сетка представляет собой квадрат (т.е. имеет N х N символов, где N < = 10)c - Проверка на нуль в массиве 2d
входного файла, например:
pitk
olpe
pkey
tope
При печати сетки в БГД , я получаю следующий результат:
$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;
}
Это возвращает ложь, и моя программа завершает работу, даже если входной сетки в данном случае является действительным.
Я не могу понять, почему функция 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