2017-11-12 9 views
-1

다음 코드의 fscanf 함수는 다음 패턴으로 이동하지 않고 동일한 패턴을 파일에서 반복해서 찾습니다. 이 문제를 어떻게 해결할 수 있습니까?fscanf()는 루프에서 같은 패턴을 반환합니다.

void checkInput(char *fileName, int time, int* totalProcesses) 
{ 
    FILE *input; 
    int startTime; 
    int pid; 
    int prio;  
    int vruntime = 50; 
    input = fopen(fileName, "r"); 

    do 
    { 
     fscanf(input, "%i start %i prio %i", &pid, &startTime, &prio); 

     if(startTime == time) 
     { 
      createProcess(pid, startTime, vruntime); 
      totalProcesses++; 
      printf("%s\n %i", "proccess created", pid); 
     } 

    } while (!feof(input)); 

    fclose(input); 
} 
+0

을 의미 대신 당신이 뭔가를해야합니다. 아마도'fscanf'의 반환 값을 검사해야합니다. 'fileName'에서의 입력 예제는 좋을 수도 있습니다 ... –

+0

예를 들어 콜론이 시간 필드에서 나타나거나'start'가 한 번 잘못 되었기 때문에 코드가 문제가되는 경우 또는 비슷한, 당신은 처리의 동일한 지점에서 반복적으로 실패 할 것입니다. 'fscanf()'의 반환 값을 확인해야합니다. 반환 값이 0, 1 또는 2로 실패하면 다시 시도하기 전에 줄 끝까지 읽는 것이 좋습니다. 라인 기반의 입력 ('fgets()')과'sscanf()'를 사용한다면 문제의 원인을 출력 할 수 있습니다. fscanf()가 그것의 일부를 소비했을 때 그것을하는 것이 훨씬 더 어렵다. –

+0

또한 [ 'while (! feof (file))'은 항상 잘못되었습니다.] (https://stackoverflow.com/questions/5431941/) -이 코드도 예외는 아닙니다. –

답변

2

확인 fscanf의 반환 값 - 실패 할 때 당신 루프 다시 시도, 그래서 만약 같은 일이 발생합니다, 아무것도 읽지 않습니다.

while(fscanf(input, "%i start %i prio %i", &pid, &startTime, &prio) == 3) { 
    if(startTime == time) { 
     createProcess(pid, startTime, vruntime); 
     totalProcesses++; 
     printf("%s\n %i", "proccess created", pid); 
    } 
} 

이것은 또한 [mcve] 적절한를 생산하는 방법을 읽어 보시기 바랍니다 당신에게 don't use feof