2017-12-31 127 views
1

とのトラブルを抱えて: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文字列全体であることに注意してください。

+3

strtokのプロトタイプが 'char * strtok(char * str、const char * delim); 'である場合、関数を正しく使用していないことを前提としています:2番目のパラメータはデリミタです。 – fvu

+0

'token = strtok(NULL、linha);で' linha'以外のものを使用しているはずです - おそらく '" \ n "'他の出現箇所があれば。 'strtok()'を使うのは難しいです。できるだけ避けてください。 –

+0

'FILE * f;という行に厄介な相互接続性があります。 if(check_ifEmptyFile()== - 3) return; fstop( "highscores.txt"、 "r"); ' - check_ifEmptyFile()はファイル名' 'highscores.txt ''も知っていなければなりません。カップリングを減らす。それらが機能するための関数にファイル名を渡します。これは 'loadHighScores()'関数に当てはまります。それはおそらく作業するファイル名を与えられるべきです。 –

答えて

2

strtok()では、第2パラメータは区切り文字でなければなりません。 あなたの場合、文字スペース: ''にする必要があります。

token = strtok(linha, " "); 

と連続通話用:linhaであなたはすべての行を解析

token = strtok(NULL, " "); 

+1

質問の中のコードは '" \ n "' space-newlineを使います。それも適切かもしれない。 –

関連する問題