【发布时间】:2020-08-30 02:43:12
【问题描述】:
在这个简单的程序中,我的目标是从文件(称为 map.dat)中扫描矩阵。出于某种原因,每当我尝试扫描它时,一切都很顺利,直到第 6 行。在它获取第 5 行中的所有元素后,它继续扫描第 6 行,这会工作一段时间,然后当 j==10 时,第 6 行的元素开始进入第 5 行,然后从第 9 行中删除矩阵。我尝试使用字符串一次扫描一行,但结果似乎是一样的。
#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLUMNS 40
int main(int argc,char* argv[])
{
FILE* fp=fopen("map.dat","r");
if(fp==NULL)
{
exit(1);
}
char m[ROWS][COLUMNS+2];
int i,j;
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLUMNS+1; j++)
{
fscanf(fp,"%c",&m[i][j]);
}
}
return 0;
}
这是 map.dat 文件中的内容:
........................................
....#####...............................
....#####...............................
....#####...............##############..
....#####.....###.......##############..
....#####.....###.......................
..............###........######.........
..............###........######.........
.........................######.........
........................................
【问题讨论】:
-
当您可以只使用
fread并自己解析时,为什么还要对fscanf大惊小怪?鉴于所需格式与文件中的内容有多接近,您可以对缓冲区进行一些非常简单的处理,并从原始缓冲区中获得您想要的数组。 -
检查fscanf的返回值
-
@tadman 我是一个非常基础的程序员,我正在为我的 CS 课学习,我们只见过 fscanf 或 fgets,所以我相信在解决这个问题时我们应该使用这些函数。
-
fscanf是你应该尽快摆脱的拐杖。 C 的真正潜力在于制作自己的简单解析器,并在必要时增加复杂性。 -
@4386427 它正在返回 1
标签: c file multidimensional-array