Ich fülle ein 10 x 10 Raster von Zeichen aus einer Eingabedatei. I überprüfen müssen, wenn das Gitter ein Quadrat ist (das heißt, hat N Zeichen N x, wobei N < = 10)c - Prüfen auf Null in einem 2d Array
Die Eingabedatei derart ist:
pitk
olpe
pkey
tope
Wenn ich das Gitter in GDB drucken , erhalte ich folgendes Ergebnis:
$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"}
der Teil meiner Hauptfunktion, die das Netz überprüft, ob gültig ist, ist:
bool check = (checknxn(grid));
if(check == false) {
fprintf(stderr, "Invalid Input!\n");
exit(0);
}
Die checknxn Funktion:
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;
}
Dieser Wert false zurück, und mein Programm beendet, obwohl das Eingangsgitter in diesem Fall gültig ist.
Ich kann nicht herausfinden, warum die checknxn Funktion in diesem Fall false zurückgibt.
UPDATE: Dies ist, wie ich meine Gitter initialisieren:
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;
}
}
}
Haben Sie Ihren Debugger versucht (oder sogar printf?). Angesichts Ihrer Eingabe kann ich sehen, warum es fehlschlägt.Beginnen Sie vielleicht damit, 'i' und' j' in 'row' und' col' umzubenennen, damit es einfacher zu folgen ist ... – John3136
@ John3136 Ich habe meinen Debugger benutzt, um den Wert von grid zu überprüfen, habe ihn aber nicht benutzt es auf der checknxn Funktion, da ich nicht sicher bin, wie man gdb auf einer Hilfsfunktion benutzt. – RockAndaHardPlace
treten Sie einfach hinein. – John3136