/ / C - има проблеми с strtok - c, fgets, strtok

C - има проблеми със strtok - 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"

например 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("%dn", High1->plays);

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

token = strtok(NULL, linha);
High1->record_seconds=atoi(token);
printf("%dn", 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 isn "т прави това, което възнамерява да направи. Някакви съвети?

Забележи, че High1 е дефинирано преди това malloc не е грешно и също така High1->date_time трябва да бъде цялата 31/12 / 2017-23: 00: 20 низ.

Отговори:

2 за отговор № 1

в strtok() вторият параметър трябва да бъде делимера. Така че, в твоя случай, трябва да е мястото за символи: "".

token = strtok(linha, " ");

и за последователни обаждания:

token = strtok(NULL, " ");

където си анализираш всеки ред в linha.