C如何正确地使用数字和字符串fscanf?

时间:2019-04-19 16:09:46

标签: c struct scanf config

我正在用SDL2编写一个学校项目的游戏,在C中,我有一个配置,其中列出了这样的键值对:

groundTiles: images/Overworld/groundTiles.pngcellHeight: 32

我应该如何解析这些数据?因为我的尝试导致正确读取了整数,但字符串丢失了字符或完全损坏了。我至少是C的初学者,至少在文件I / O方面

由于我已经花了太多时间在此代码上,因此我需要另一组眼光。

它可能与我的标头中的此结构有关,以及我如何使用它来存储临时数据?

typedef struct TileMapData_S 
{
    Uint32 col, row, cellWidth, cellHeight, numCells;
    char *mapName;
    char *emptyTileName;
    Bool flag;
    SDL_Color *colors;
    Tile* tileTypes;
    char *colorMap;
}TileMapData;

我尝试过使它成为函数中的未命名结构,然后使其成为源。没运气。我只是尝试不使用结构,而是将每个数据fscanf's放入一个单独的变量中。同样的事情,没有运气。如果我以温度作为我要解析的键的值来进行fscanf(file, "%s %s", buf, temp)的操作,那么我将首次遇到我要查找的字符串,然后它将自身复制到其他两个保留字符的char *上。我的精灵/文件的名称。

编辑:这是我基于评论的尝试,不起作用,任何见识都会受到赞赏

    while (!data->flag)
    {
        while (tempString != EOF)
        {
            tempString = strtok(buf, " \n");

            if (strcmp(tempString, "width:") == 0)
            {
                tempString = strtok(buf, "\n\0 ");
                map->numColumns = atoi(tempString);

                continue;
            }
            .
            .
            .
            if (strcmp(tempString, "groundTiles:") == 0)
            {
                data->mapName = strtok(buf, "\n\0 ");

                data->mapName = tempString;

                if (data->mapName != NULL)
                {
                    data->flag = true;
                }
                else
                {
                    data->flag = false;
                }

                continue;
            }
            .
            .
            .

            tempString = fgets(buf, sizeof(buf), file);
            slog(buf);
        }

        rewind(file);
    }

我原本希望得到想要的字符串,但不带空格/以NULL结尾的字符,但最终会出现无限循环

结束编辑

我希望当我解析groundTiles: images/Overworld/groundTiles.png时 使用fscanf(file,“%s”,buf),在该字符串上执行strcmp并使用已知字符串(groundTiles :),然后第二个fscanf应该提供字符串images/Overworld/groundTiles.png

0 个答案:

没有答案