とのトラブルを抱えて:C - Iは、構造体のこの種のゲームのいくつかのハイスコアをロードしようとしているはstrtok
typedef struct{
char date_time[20];
int record_minutes;
int record_seconds;
int plays;
} Highscore;
ハイスコアがそうのようなtxtファイルに格納されています。「nrplays分の秒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("%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文字列全体であることに注意してください。
strtokのプロトタイプが 'char * strtok(char * str、const char * delim); 'である場合、関数を正しく使用していないことを前提としています:2番目のパラメータはデリミタです。 – fvu
'token = strtok(NULL、linha);で' linha'以外のものを使用しているはずです - おそらく '" \ n "'他の出現箇所があれば。 'strtok()'を使うのは難しいです。できるだけ避けてください。 –
'FILE * f;という行に厄介な相互接続性があります。 if(check_ifEmptyFile()== - 3) return; fstop( "highscores.txt"、 "r"); ' - check_ifEmptyFile()はファイル名' 'highscores.txt ''も知っていなければなりません。カップリングを減らす。それらが機能するための関数にファイル名を渡します。これは 'loadHighScores()'関数に当てはまります。それはおそらく作業するファイル名を与えられるべきです。 –