我正在用SDL2编写一个学校项目的游戏,在C中,我有一个配置,其中列出了这样的键值对:
groundTiles: images/Overworld/groundTiles.png
和
cellHeight: 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