2010-12-09 7 views
1

"33 sun 15:00 FCM - SIF 3-0"과 같은 파일에 줄이 있습니다. 모든 데이터를 추출해야합니다. 지금까지 "sun", "FCM"및 "SIF"문자열을 추출 할 때 약간의 오류가 발생하는이 코드가 있습니다. "sun"을 "sunFCMSIM"으로, "FCM"을 "FCMSIF"로, "SIF"는 정확합니다.C에서 fscanf를 사용하여 여러 문자열 읽기

입력 파일을 위의 것과 같이 여러 줄에서 만들 수 있습니다. 이 정보가 올바르게 추출되었는지 어떻게 확인합니까? fscanf에 대한 문서는 s 변환 지정자에 따르면

#include <stdio.h> 
#include <stdlib.h> 

#define LINEBUFFERSIZE 50 
#define TEAMNAMELENGTH 3 
#define WEEKDAYLENGTH 3 

void __construct(char fileName[FILENAME_MAX]) { 
FILE *inputFile; 
char buffer[LINEBUFFERSIZE]; 
// Open input file 
inputFile = fopen(fileName, "r"); 

// Read all matches and create 
while(fgets(buffer, LINEBUFFERSIZE, inputFile) != NULL){ 
    int round, hour, minute, homeGoals, outGoals; 
    char outTeam[TEAMNAMELENGTH], homeTeam[TEAMNAMELENGTH], weekday[WEEKDAYLENGTH]; 

    fscanf(inputFile, "%d %3s %2d:%2d %3s - %3s", &round, weekday, &hour, &minute, homeTeam, outTeam); 
    printf("Round: %d\n", round); 
    printf("%s %02d:%02d\n", weekday, hour, minute); 
    //printf("%s - %s\n", homeTeam, outTeam); 
} 

fclose(inputFile); 
} 

int main() { 
    /*char inputFile[FILENAME_MAX]; 
    printf("Enter input file> "); scanf("%s", &inputFile);*/ 
    __construct("superliga-2009-2010"); 
    return 0; 
} 

답변

1

:

비 공백 문자의 순서를 일치; 다음 포인터는 입력 순서 과 종료 널 (null) 문자 ('\ 0')을 포함 할 수있을만큼 긴 문자 배열에 대한 포인터 여야하며 자동으로 추가됩니다.

버퍼가 NULL 종결자를 수용 할만큼 충분히 크지 않습니다. 예상대로

char outTeam[TEAMNAMELENGTH + 1], homeTeam[TEAMNAMELENGTH + 1], weekday[WEEKDAYLENGTH + 1]; 

귀하의 코드가 작동 : 당신은 outTeam, homeTeamweekday를 선언하여, 예를 들면 다음 것을 해결합니다.

+1

신의 축복이 있습니다. :) 젠장, 나는 그것을 놓쳤습니다 :) Thanks mate –