我给出了一个文本文件,其中包含有关游戏世界的信息以及此格式的碰撞数据。
Width 5
Height 5
10001
11000
11100
11111
11111
为了存储数据,我给出了
static int BINARY_MAP_WIDTH;
static int BINARY_MAP_HEIGHT;
和
static int **MapData; // Dynamic array of map data
我的FileIO knowldege不仅仅是逐行读取文件中的字符串。
到目前为止,我只是在前两行中有这种非常迂回的阅读方式。
FILE *Data;
int line = 1; // line number that we're on
Data = fopen(FileName, "rt");
if (!Data)
return 0;
if (Data)
{
while (!feof(Data))
{
if (line == 1)
fscanf(Data, "%*[^0-9]%d%n", &BINARY_MAP_WIDTH);
if (line == 2)
fscanf(Data, "%*[^0-9]%d%n", &BINARY_MAP_HEIGHT);
if (line > 2)
break;
line++;
}
}
说实话,我并不完全确定它为什么会起作用,但我在变量中得到了正确的值。
我知道如何设置动态数组,此时我的问题是读取正确的值。 我不确定从哪里开始。
答案 0 :(得分:0)
您需要了解有关fscanf
fscanf
将消耗所需的字节数来执行
请求转换并相应地更新文件指针。
对fscanf
的下一次调用将从文件中的位置开始
前一个fscanf
结束的地方。fscanf
会返回成功转化的次数,所以您
应该验证返回值是否等于
请求转换。所以这就是我如何重写你目前的代码
#include <stdio.h>
static int mapWidth;
static int mapHeight;
int readFromFile( char *name )
{
FILE *fp;
int good = 1;
if ( (fp = fopen(name, "r")) == NULL )
return 0;
if ( fscanf(fp, "%*[^0-9]%d", &mapWidth) != 1 )
good = 0;
if ( fscanf(fp, "%*[^0-9]%d", &mapHeight) != 1 )
good = 0;
if ( good )
{
// the code to read the rest of the file goes here
}
fclose( fp );
return good;
}
int main( void )
{
if ( readFromFile( "input.txt" ) )
printf( "%d %d\n", mapWidth, mapHeight );
else
printf( "readFromFile failed\n" );
}
下一步是找出
MapData
分配内存fgets
或fscanf(..."%s"...)
MapData