我正在学习 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/