INI文件读取器功能正在为我的结构寻址错误的值,如何解决此问题?

时间:2019-01-19 17:26:59

标签: c file ini

这是一个用于大学的项目(卡坦游戏的小副本),我在这一部分上有些挣扎,我们已经读取了一个格式非常简单的INI文件,它仅带有以';开头的注释。 '然后只是前面带有值的标签:

xdim=4
ydim=5
N=D
S=L2
E=S10
W=D
etc...

我具有从INI文件读取并将读取的值寻址到正确的struct元素的功能。但是似乎它甚至没有读取文件,该结构是带有xdim和ydim的简单结构,在我将func xdim称为'&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;
}

使用以下命令测试主要即时通讯

int main(int argc, char **argv) {
    MAP_CONFIG map;
    MAP_CONFIG *mapa = &map;
    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,然后针对每个结构对结构数组重复该过程以获取INI文件中存在的N,S,E,W的正确值...帮助!

0 个答案:

没有答案