-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);
}
を意味
:代わりに次のようなものが必要。おそらく 'fscanf'の戻り値もチェックするべきです。 'fileName'での入力の例はいいかもしれません... –
例えば、コロンが時間フィールドで現れたり、' start'のスペルが間違っているなどの理由で、あなたのコードが問題に遭遇した場合、同じようなものであれば、処理の同じ時点で繰り返し失敗します。 'fscanf()'の戻り値をチェックする必要があります。返り値が0、1、または2で失敗した場合は、行の最後まで読み込んで再度試してみることができます。行ベースの入力( 'fgets()')と 'sscanf()'を使用すると、問題の原因を印刷することができます。 'fscanf()'がそれを消費したときは、それを行うのがはるかに難しいです。 –
また、['while(!feof(file)) 'は常に間違っています。](https://stackoverflow.com/questions/5431941/) - このコードも例外ではありません。 –