我正在尝试用C读取文件并将char存储在二维字符数组中。我的ROWS
和COL
是10,据我所知,我的循环应该为每列和每行执行10次。所以我不认为应该有任何未初始化的细胞。我也搜索了类似的问题,他们都谈论数组的初始化,因为程序有时会遗漏包含垃圾的空单元格,但在我的情况下,它应该没有那个问题,是吗?
我的代码是:
for (row = 0; row < ROWS; row++) {
for (col = 0; col < COL; col++) {
int chtr = fgetc(fp);
if (chtr != '\n') {
grid[row][col] = chtr;
}
}
}
左侧是我的输出,但它包含随机字符,但是,我的预期输出应该是正确的输出:
可能导致这种行为的原因是什么?
答案 0 :(得分:3)
问题在于,您不是正在跳过换行符,而是如果您遇到换行符,则您不会更新地图中的该位置(并且它包含旧垃圾)。如果你有一张更复杂的地图,你还会注意到每一行都会进一步开始,即如果你的地图是
@BCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
ABCDEFGHIJK
你会看到:
@BCDEFGHIJK
)ABCDEFGHIJ
K#ABCDEFGHI
JK.ABCDEFGH
等等。
您可以循环,直到fgetc
返回非换行符:
int chtr;
while ((chtr = fgetc(fp)) == '\n') { }
// some extra error handling wouldn't hurt
if (chtr == EOF) {
printf("Corrupted map file!\n");
exit(2);
}
grid[row][col] = chtr;