2017-12-31 58 views
1

내가 구조체 이런 종류의 게임의 일부 최고 기록을로드하기 위해 노력하고있어에 문제가 갖는C - 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 전체 12분의 31/2017-23해야한다 : 00 : 20 문자열입니다.

+3

strtok의 프로토 타입이'char * strtok (char * str, const char * delim); '이라고하면 함수를 제대로 사용하지 않고 있습니다. 두 번째 매개 변수는 구분 기호 여야합니다. – fvu

+0

'token = strtok (NULL, linha);에서'linha' 이외의 것을 사용하고있을 것입니다 - 아마도 다른 사건이 있다면 "\ n"'아마. 'strtok()'을 사용하는 것은 어렵습니다; 가능한 한 피하십시오. –

+0

'FILE * f; 줄에 불쾌한 상호 연결이 있습니다. if (check_ifEmptyFile() == - 3) return; fshen ("highscores.txt", "r");'- 어떤 의미를 만들기 위해서'check_ifEmptyFile()'은 파일 이름''highscores.txt ''도 알고 사용해야한다. 커플 링 감소. 파일 이름을 함수에 전달하여 함수가 작동하도록합니다. 그것은'loadHighScores()'함수에 적용된다; 작업 할 파일 이름을 제공해야합니다. –

답변

2

strtok()에서 두 번째 매개 변수는 delimeter 여야합니다. 그래서, 귀하의 경우 문자 공간이어야합니다 : ''.

token = strtok(linha, " "); 

연속 통화

: 당신이 linha의 모든 라인을 구문 분석

token = strtok(NULL, " "); 

.

+1

질문의 코드는''\ n "'space-newline; 그것은 적절할 수도 있습니다. –

관련 문제