我正在尝试读取 C 中的文件并将字符存储在二维字符数组中。我的 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;
}
}
}
左边一个 是我的输出,但它包含随机字符,但是,我的预期输出 应该像右边那个:
是什么导致了这种行为?
最佳答案
问题是你没有跳过换行符,相反,如果你遇到换行符,你没有更新 map 中的那个位置(它包含旧垃圾)。如果您有一个更复杂的 map ,您还会注意到每一行都开始得更远,即如果您的 map 是
@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;
关于c - 使用 fgetc 将数据加载到二维数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42461291/