我创建了一个函数,它加载了一个非常基本的格式的地图文件:
1:1 2:1 1:1 2:2 2:2 2:2 ...
................... 2:1 1:1
但是,当使用fscanf
读取文件时,我会得到一些非常奇怪的行为。
查看我设置的FILE
变量来读取地图,base
的'stream'的FILE
元素似乎已经完美地读取了该文件。但是,_ptr
的“流”的FILE
缺少第一个数字,而最后一个数字。所以它被解读为:
:1 2:1 1:1 2:2 2:2 2:2 ...
................... 2:1 1:
并且正在生成错误。
这是我的功能:
/**
* loads a map
*/
bool Map::LoadMap(char* tFile)
{
FILE* FileHandle = fopen(tFile, "r"); // opens map file for reading
if (FileHandle == NULL) // returns if the map file does not exist
return false;
for(int Y = 0; Y < MAP_HEIGHT; Y++) // iterates through each row
{
for(int X = 0; X < MAP_WIDTH; X++) // iterates through each column
{
Node tNode; // temp node to put in the map matrix
int tTypeID = 0;
int tNodeCost = 0;
fscanf(FileHandle, "%d:%d", tTypeID, tNodeCost);
tNode.SetPosition(X, Y);
tNode.SetType(tTypeID);
tNode.SetNodeCost(tNodeCost);
mMap[X][Y] = tNode; // inserts temp node into list
}
fscanf(FileHandle, "\n");
}
fclose(FileHandle);
return true;
}
为什么会这样?
答案 0 :(得分:3)
您需要将变量的地址传递给fscanf()
:
fscanf(FileHandle, "%d:%d", &tTypeID, &tNodeCost);
建议检查fscanf()
的返回值以确保成功:
// fscanf() returns the number of assignments made or EOF.
if (2 == fscanf(FileHandle, "%d:%d", &tTypeID, &tNodeCost))
{
}