Я пишу игру на SDL2 для школьного проекта, на C, у меня есть конфиг, в котором перечислены пары ключ-значение как:
groundTiles: images/Overworld/groundTiles.png
и cellHeight: 32
Как мне разобрать эти данные?Потому что мои попытки приводят к тому, что целые числа читаются правильно, но в строках либо отсутствуют символы, либо они полностью повреждены.Я немного новичок в C, по крайней мере, с точки зрения файла ввода / вывода
Мне нужен еще один взгляд на этот код, потому что я уже потратил слишком много часов на это.
Может ли это иметь какое-то отношение к этой структуре в моем заголовке и как я использую ее для хранения временных данных?
typedef struct TileMapData_S
{
Uint32 col, row, cellWidth, cellHeight, numCells;
char *mapName;
char *emptyTileName;
Bool flag;
SDL_Color *colors;
Tile* tileTypes;
char *colorMap;
}TileMapData;
Я попытался сделать ее безымянной структурой в функции, затемисточник.Неудачно.Я пытался просто не использовать struct и fscanf'ing каждый кусок данных в отдельной переменной.То же самое, не повезло.Если я выполнил fscanf(file, "%s %s", buf, temp)
со значением temp, являющимся значением ключа, который я анализирую, то я получаю первое совпадение со строкой, которую я ищу, а затем копирует себя в два других символа *, которые содержат именамои спрайты / файлы.
РЕДАКТИРОВАТЬ: Это моя попытка, основанная на комментариях, которая не работает, любая оценка будет оценена
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);
}
Я ожидал получить строку, которую я хотел,без пробела / символа с нулевым символом в конце, но завершился бесконечным циклом), выполнив для этого strcmp и известную строку (groundTiles :), тогда второй fscanf должен предоставить строку images/Overworld/groundTiles.png