2

私はCで書かれた単純なアプリケーションに取り組んでいます。Unix環境で働いています。

私のアプリケーションはいくつかの単純なI/Oを実行しています。printfを使用してユーザーに入力を求め、scanfを使用してその入力を取得します。

問題は、値を入力した後、続行する準備ができていることをアプリケーションに伝える方法がわからないことです。'enter'と入力すると、意味のある改行'\n'が提供されます。Control-dは、scanfが私の入力をキャプチャすることを許可しますが、後続のscanf命令を無視しているようです。

誰かが私を助けることができますか?

printf("Enter name\n");
scanf("%s",input);
printf("%s",input);

printf("enter more junk\n")
scanf("%s",morestuff); /* cntrl+d skips this*/
4

2 に答える 2

4

からの戻り値を確認してくださいscanf()。(入力した結果として)EOFを取得するcontrol-Dと、エラーをクリアするまで毎回失敗します。

使用には注意してくださいscanf(); 必要だと思うエラー処理を制御できないため、現実の世界で使用するのは非常に難しいと思います。fgets()データの行を読み取るか、それに相当するものを使用してから、(sscanf()はるかに文明化された関数)を使用してデータを解析することをお勧めします。

ゆるやかに関連する質問も参照してください:SO3591642

于 2010-08-30T03:13:38.197 に答える
-1

[編集:この答えは正しくありません。以下に述べるように、私も学んでいます]

CTRL-Zを試しましたか?

これにより、EOFがscanfに送信され、そのマニュアルページによると、scanfは次のフィールドに移動するはずです。入力形式として文字列のみを入力したので、scanfを終了する必要があります。

現在、これをテストすることはできませんが、試してみることができます。

マニュアルページはこちらです:

http://www.slac.stanford.edu/comp/unix/package/rtems/doc/html/libc/libc.info.scanf.html

于 2010-08-30T03:16:16.390 に答える