SDL fscanf功能问题

时间:2012-06-29 15:35:48

标签: c++ sdl scanf

我创建了一个函数,它加载了一个非常基本的格式的地图文件:

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;
}

为什么会这样?

1 个答案:

答案 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))
{
}