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 に答える