0

標準入力から入力を読み取る必要がある基本的な C プログラムがあります。まず、次を使用して入力ファイルから読み取ります。

./Program <input

そして、それがなくなるまでループしてそれを読み取ります

while(scanf("%s",command)!=EOF){
    printf("%s\n",command);
}

その後、キーボードから再度読み取る必要がありますが、入力ファイルの最後の行をスパム読み取りすることが無限に続き、入力にキーボードを使用できません。

 while(1){

 scanf("%s",command);
 if(!strcasecmp(command,"exit"))
  exitProg();
 else if(!strcasecmp(command,"help"))
  helpMess();
 else
  printf("Command \"%s\" not recognized, use command \"help\" for a list.\n",command);
 }
4

1 に答える 1

0

のドキュメントscanf、特に以下に抜粋した戻り値に関する部分をお読みください。

戻り値

成功すると、関数は正常に読み取られたアイテムの数を返します。一致エラーが発生した場合、このカウントは予想される読み取り数と一致するか、ゼロになることもあります。データが正常に読み取られる前に入力エラーが発生した場合は、EOF が返されます。

あなたが抱えている問題は、ファイルがデータを使い果たすと、プログラムの標準入力が制御端末に戻らず、空のファイルの最後にとどまることです。scanf 呼び出しは黙って失敗し、内容はcommand変更されません。両方から読み取れるようにしたい場合は、それを処理する別の方法を見つける必要があります。

シェルがこの機能をサポートしている可能性があります。

于 2012-09-06T19:02:50.463 に答える