Próbuję załadować niektóre wyniki gry do tego rodzaju struktury:
typedef struct{
char date_time[20];
int record_minutes;
int record_seconds;
int plays;
} Highscore;
Najlepsze wyniki są przechowywane w pliku txt w następujący sposób: „nrplays minutes seconds date_and_time”
na przykład 15 2 10 31/12/2017-23:00:20
Pierwszy bit kodu, którego używam do odczytu pliku (który ma tylko 3 wiersze, dlatego nie tworzyłem pętli) jest następujący
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);
}
Wyjście było takie
linha: 15 2 10 31/12/2017-23:00:20
15
2
0
/
co oznacza, że strtok nie robi tego, co zamierzałem zrobić. Jakieś wskazówki?
Zauważ, że High1
został wcześniej zdefiniowany malloc
nie jest źle, a także to High1->date_time
powinien być cały ciąg 31/12 / 2017-23: 00: 20.
Odpowiedzi:
2 dla odpowiedzi № 1W strtok()
drugim parametrem powinien być delimetr. W twoim przypadku powinna to być przestrzeń znaków: „”.
token = strtok(linha, " ");
i dla kolejnych połączeń:
token = strtok(NULL, " ");
gdzie analizujesz każdą linię linha
.