【发布时间】:2013-02-08 14:00:19
【问题描述】:
我目前正在开发从 .txt 文件中获取信息并需要将其存储在矩阵中的程序。当我只是打印文件时,我使用接下来的几行代码:
void read_maze(struct maze *mazePointer) {
FILE *fp;
fp = fopen("map1.txt", "r");
int counter = 0;
int column = 0;
char mazeContent[99999];
if(fp != NULL) {
while (fscanf(fp, "%c", &mazeContent[counter]) == 1){
int row = counter % 10;
printf("%c", mazeContent[counter]);
counter++;
if (row == 9) {
column ++;
}
}
fclose(fp);
}
}
请注意,我还没有使用“行”和“列”变量,这纯粹是为了下一个示例!从这行代码中,我得到以下输出:
##########
# # #
# ## #S#
# ########
# E#
##########
它看起来不错,但是一旦我将列和行变量添加到它们,我需要将它们存储在一个矩阵中,这就是为什么我需要正确拟合列和行,我得到以下输出。
#(0,0)#(0,1)#(0,2)#(0,3)#(0,4)#(0,5)#(0,6)#(0,7)#(0,8)#(0,9)
(1,0)#(1,1) (1,2) (1,3) (1,4) (1,5)#(1,6) (1,7) (1,8) (1,9)#(2,0)
(2,1)#(2,2) (2,3)#(2,4)#(2,5) (2,6) (2,7) (2,8)#(2,9)S(3,0)#(3,1)
(3,2)#(3,3) (3,4)#(3,5)#(3,6)#(3,7)#(3,8)#(3,9)#(4,0)#(4,1)#(4,2)
(4,3)#(4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (5,0) (5,1)E(5,2)#(5,3)
(5,4)#(5,5)#(5,6)#(5,7)#(5,8)#(5,9)#(6,0)#(6,1)#(6,2)#(6,3)#(6,4)
这不一样。正如您所注意到的,我的函数计算第 2 行开头的空间以及其余部分,而我的 .txt 文件中没有空间。它完全搞砸了一切,因为我无法在矩阵中的指定位置签署数字。有谁知道出了什么问题,因为很遗憾我找不到它。
【问题讨论】:
-
fscanf(fp, "%c", &mazeContent[counter]);也读入换行符,如果有任何因为您的文件来自 Windows,请回车 ('\r')。 -
我明白你的意思。不幸的是,我不能跳过空格,因为那会破坏我的迷宫。您对如何解决这个问题有什么建议吗?
-
使用
fgetc看看你得到的字符是否需要忽略? (好吧,你也可以用你所拥有的来做到这一点,只需在循环顶部添加if (mazeContents[counter] == '\r') continue;[可能还有其他用于忽略的比较]。) -
感谢您的反馈!我将 fscanf 更改为 fgets,它现在可以工作了!