简体   繁体   中英

SDL fscanf Function Issue

I created a function which loads a very basic map file of the form:

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

However, when using fscanf to read in the file, I am getting some very odd behaviour.

Looking at the FILE variable I have set up to read the map, the base element of the 'stream' of the FILE seems to have read the file perfectly. However, the _ptr of the 'stream' of the FILE is missing the first number, and the last. So it gets read as:

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

and is generating an error.

Here is my function:

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

Why this is happening?

You need to pass the addresses of the variables to fscanf() :

fscanf(FileHandle, "%d:%d", &tTypeID, &tNodeCost);

Recommend checking the return value of fscanf() to ensure success:

// fscanf() returns the number of assignments made or EOF.
if (2 == fscanf(FileHandle, "%d:%d", &tTypeID, &tNodeCost))
{
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM