C - 与strtok有困难

时间:2017-12-31 02:42:19

标签: c fgets strtok

我试图将游戏的某些高分加载到这种结构中:

typedef struct{
    char date_time[20];
    int record_minutes;
    int record_seconds;
    int plays;
} Highscore;

高分存储在txt文件中,如下所示:" nrplays minutes seconds date_and_time"

e.g。 15 2 10 31/12/2017-23:00:20

我用来读取文件的代码的第一位(只有3行,这就是为什么我没有创建循环)是以下

void loadHighscores(){

    FILE *f;

    if (check_ifEmptyFile()==-3)
            return;

    f=fopen("highscores.txt", "r");

    char linha[30];
    char *token;

    High1 = (Highscore *)malloc(sizeof(Highscore));

    fgets(linha, 30, f);
    printf("linha: %s", linha);

    token = strtok(linha, " \n");
    High1->plays=atoi(token);
    printf("%d\n", High1->plays);

    token = strtok(NULL, linha);
    High1->record_minutes=atoi(token);
    printf("%d\n", High1->record_minutes);

    token = strtok(NULL, linha);
    High1->record_seconds=atoi(token);
    printf("%d\n", High1->record_seconds);

    token = strtok(NULL, linha);
    snprintf(High1->date_time, 20*sizeof(char), "%s",token);
    printf("%s",High1->date_time);
}

输出是这个

linha: 15 2 10 31/12/2017-23:00:20
15
2
0
/

这意味着strtok并没有按照我的意图去做。有什么提示吗?

请注意,High1之前已定义,malloc并非错误,High1->date_time应该是整个31/12 / 2017-23:00:20字符串

1 个答案:

答案 0 :(得分:2)

strtok()中,第二个参数应该是分隔符。 所以,在你的情况下,应该是字符空间:''。

token = strtok(linha, " ");

和连续的电话:

token = strtok(NULL, " ");

解析linha中的每一行。