Это для проекта для университета (небольшая копия игры Catan), и я немного борюсь с этой частью, у нас есть чтение файла INI с довольно простым форматированием, в нем есть только некоторые комментарии, начинающиеся с '; ' и тогда это просто теги со значением впереди:
xdim=4
ydim=5
N=D
S=L2
E=S10
W=D
etc...
У меня есть эта функция, чтобы читать из INI-файла и адресовать прочитанные значения правильному элементу структуры. Но кажется, что он даже не читает файл, структура представляет собой простую структуру с xdim и ydim, после того, как я вызываю func xdim '& d & d & d & d & d и т. Д ...', а ydim 0
Я попытался поместить в некоторые файлы printf только для того, чтобы проверить, правильно ли читаются значения из самого файла INI, где ничего не печатается.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 128
typedef struct UNIT { /**struct used in an array for the rest of the INI values*/
char N[4];
char S[4];
char W[4];
char E[4];
char Building;
}UNIT;
typedef struct{ /**This is declared in main and passed to the functions*/
UNIT *grid;
unsigned int xdim;
unsigned int ydim;
} MAP_CONFIG;
void set_config_val(MAP_CONFIG *config, const char *key, int val) {
if (config == NULL)
return;
if (strcmp(key, "xdim") == 0){
printf("here");
config->xdim = val;
}
else if (strcmp(key, "ydim") == 0){
printf("here");
config->ydim = val;
}
else{
;
}
}
void read_config(MAP_CONFIG *config,FILE *f) {
char str[MAX];
char *token;
const char *delim = "=\n";
while (1) {
fgets(str, MAX, f);
if(feof(f)!= 0) break;
puts(str);
if (strchr(str, '=')!=NULL) {
char varname[MAX];
int value;
token = strtok(str, delim);
strcpy(varname, token);
token = strtok(NULL, delim);
value = atoi(token);
printf("&d", token);
set_config_val(config, varname, value);
}
}
config = malloc(sizeof(MAP_CONFIG));
config->grid = calloc(config->xdim * config->ydim, sizeof(UNIT));
close(f);
return;
}
функция открытия файла:
FILE *openFile(char *nome, char *mode) {
FILE *f;
printf("Opening file %s\n", nome);
f = fopen(nome, mode);
if (f == NULL) {
fprintf(stderr, "*** It was not possible to open the file %s.", nome);
exit(1);
}
return f;
}
проверка основных im с использованием:
int main(int argc, char **argv) {
MAP_CONFIG map;
MAP_CONFIG *mapa = ↦
FILE *f;
char *filename;
for (int i = 0; i < argc; i++)
printf("Parametro %d: %s\n", i, argv[i]);
if (argc >= 2) {
filename = argv[1];
}
else {
printf("Opening base map file..\n");
filename = "mapa.ini";
}
f = openFile(filename, "r");
read_config(mapa, f);
printf("%d %d", map.xdim, map.ydim);
return 0;
}
Я просто хочу, чтобы он прочитал xdim и ydim, а затем повторил процесс для массива структур для каждой структуры, чтобы получить правильное значение N, S, E, W, присутствующего в файле INI ... Справка !