使用fgetc将数据加载到2d数组?

时间:2017-02-25 20:33:22

标签: c arrays file char

我正在尝试用C读取文件并将char存储在二维字符数组中。我的ROWSCOL是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;
        }
    }
}

左侧是我的输出,但它包含随机字符,但是,我的预期输出应该是正确的输出:

My output Output expected

可能导致这种行为的原因是什么?

1 个答案:

答案 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;