Ich versuche, einige Highscores eines Spiel auf diese Art von Struktur zu laden:C - Probleme mit strtok
typedef struct{
char date_time[20];
int record_minutes;
int record_seconds;
int plays;
} Highscore;
Das Highscores in einer TXT-Datei gespeichert werden, etwa so: „nrplays Minuten Sekunden date_and_time“
z 15 2 10 31/12/2017-23:00:20
Das erste Bit des Codes ich die Datei lesen bin mit (nur 3 Zeilen hat, deshalb habe ich nicht eine Schleife erstellt haben) ist die folgende
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);
}
Der Ausgang war
linha: 15 2 10 31/12/2017-23:00:20
15
2
0
/
was bedeutet, dass strtok nicht tut, was ich vorhatte. Irgendwelche Tipps?
anzumerken, dass High1
zuvor definiert wurde, ist die malloc
nicht falsch, und auch, dass High1->date_time
sollte der gesamte 31/12/2017-23: 00: 20-String.
Vorausgesetzt, der Prototyp für strtok ist 'char * strtok (char * str, const char * delim);' Sie verwenden die Funktion nicht richtig: der zweite Parameter sollte die Trennzeichen sein. – fvu
Sie sollten wahrscheinlich etwas anderes als 'linha' in' token = strtok (NULL, linha); '- wahrscheinlich' "\ n" 'verwenden, wenn die anderen Vorkommnisse etwas sind. Die Verwendung von 'strtok()' ist schwierig. vermeide es, wenn du kannst. –
In den Zeilen 'FILE * f' gibt es eine böse Vernetzung. if (check_ifEmptyFile() == - 3) zurückgeben; f = fopen ("highscores.txt", "r"); '- Um einen Sinn zu haben, muss' check_ifEmptyFile() 'auch den Dateinamen' "highscores.txt" 'kennen und benutzen. Reduzieren Sie die Kopplung; Übergeben Sie Dateinamen an Funktionen, an denen sie arbeiten können. Das gilt für die Funktion 'loadHighScores()'; Es sollte wahrscheinlich der Dateiname gegeben werden, um zu arbeiten. –