入力ファイルから10 x 10グリッドの文字を入力しています。 私はグリッドが正方形であるかどうかを確認する必要がc - 2次元配列のnullを確認する
入力ファイルは、である(すなわち、N < = 10 N×N個の文字を持つ):
pitk
olpe
pkey
tope
Iは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