2017-11-12 6 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

を意味

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); } } 

:代わりに次のようなものが必要。おそらく 'fscanf'の戻り値もチェックするべきです。 'fileName'での入力の例はいいかもしれません... –

+0

例えば、コロンが時間フィールドで現れたり、' start'のスペルが間違っているなどの理由で、あなたのコードが問題に遭遇した場合、同じようなものであれば、処理の同じ時点で繰り返し失敗します。 'fscanf()'の戻り値をチェックする必要があります。返り値が0、1、または2で失敗した場合は、行の最後まで読み込んで再度試してみることができます。行ベースの入力( 'fgets()')と 'sscanf()'を使用すると、問題の原因を印刷することができます。 'fscanf()'がそれを消費したときは、それを行うのがはるかに難しいです。 –

+0

また、['while(!feof(file)) 'は常に間違っています。](https://stackoverflow.com/questions/5431941/) - このコードも例外ではありません。 –

答えて

2

関数fscanfの戻り値を確認してください - それはそれは何を読んで、そうであれば、あなたループして、もう一度それをしようとしていない障害が発生したとき、同じことが起こります。これはまた、[MCVE]正しいを生成する方法についてお読みくださいあなたdon't use feof

関連する問題