0

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

1:1 2:1 1:1 2:2 2:2 2:2 ...
................... 2:1 1:1

但是,当fscanf用于读取文件时,我得到了一些非常奇怪的行为。

查看FILE我为读取地图而设置的变量,base“流”的元素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;
}

为什么会这样?

4

1 回答 1

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))
{
}
于 2012-06-29T15:38:00.810 回答