gpt4 book ai didi

c - 将文件读取到 C 中的二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:11 24 4
gpt4 key购买 nike

我正在学习 C,我决定制作一个文字游戏作为我的学习项目。所以我正在尝试这个将文本文件读入二维数组的原始“解析器”,但有一个问题:这张 map 不使用 1 个字符宽的单元格,它使用 2 个字符宽的单元格。例如,玩家用**表示,门用##表示等等。

这意味着,我需要读取文本文件的 2 个字符,然后将其分配给 map 中的相应单元格。

嗯,我做了一个测试文件,里面包含

aabbccddee
ffgghhiijj
kkllmmnnoo
ppqqrrsstt
uuvvwwxxyy

我试着用

#include <stdio.h>

#define ROWS 5
#define COLS 5

int main() {
FILE *mapfile = fopen("durr", "r");
char charbuffer[3], row, col, *map[ROWS][COLS];

/* Initializing array */
for (row = 0; row < ROWS; row++) {
for (col = 0; col < COLS; col++) {
map[row][col] = " ";
}
}

/* Reading file into array */
for (row = 0; row < ROWS; row++) {
for (col = 0; col < COLS; col++) {
map[row][col] = fgets(charbuffer, 3, mapfile);
}
}

/* Printing array */
for (row = 0; row < ROWS; row++) {
for (col = 0; col < COLS; col++) {
printf("%s", map[row][col]);
}
printf("\n");
}

fclose(mapfile);
return 0;
}

但是当我执行它时,我得到了这个

uuuuuuuuuu
uuuuuuuuuu
uuuuuuuuuu
uuuuuuuuuu
uuuuuuuuuu

我认为这与 fgets 返回一个指针有关,但我不确定。我试着用 fgetc 来做,但它看起来很乱,在阅读了 gets 之后我放弃了它。

最佳答案

您应该已经对从文件中读取的内容进行了 strdup。用这个替换文件读取 block :

/* Reading file into array */
for (row = 0; row < ROWS; row++) {
for (col = 0; col < COLS; col++) {
if (fgets(charbuffer, 3, mapfile))
map[row][col] = strdup(charbuffer);
}
}

并且不要忘记将其也放在代码的开头:

#include <string.h>

关于c - 将文件读取到 C 中的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com