0

scanfたとえば、私がキーボードから文字を読んでいたとしましょう。その後、printf読んだばかりの文字を印刷するために使用します。

scanf("%c",&ch);
printf("%c",ch);

scanfが文字を読み取っているときに、Enter キーを押して続行し、 を実行する必要がありprintfますよね?

ABCDそして、キーボードで入力するとしましょう。その後、printf印刷されますA

しかし、私がこれを行うとき:

do {
   scanf("%c",&ch);
   printf("%c",ch);
} while (ch!='\n');

ABCDキーボードで入力すると、printf印刷する必要があると思いますA。そして、それはループを続けるのでAはない\nでしょうか?

しかし、これの代わりに印刷されますABCD。なぜこれが起こるのですか?

4

3 に答える 3

7

と入力すると、改行に到達するまで"ABCD\n"、それぞれが入力バッファーからscanf("%c",&ch);1 つ読み取ります。char

したがって、 が出力された後もバッファ内に'A'まだあるため、ループの次の繰り返しで次の が別のの読み取りにすぐに成功します。"BCD\n"scanfchar'B'

于 2012-11-13T16:42:01.600 に答える
4

scanf では、Enter キーを押して続行し、printf を正しく実行する必要がありますか?

いいえ。読みたい文字がある限り、読み上げられます。

私はscanf ABCDを入れた後、printfはAを印刷します...

ABCD と入力して入力すると、入力には 5 文字が含まれるようになります。A、B、C、D、および改行。サイクルは文字 A、B、C、D を順番に読み取り、次に改行を読み取ります。

于 2012-11-13T16:43:25.997 に答える
1

scanfEnter キーを押すのを待たずに、フォーマット文字列と一致する場合は、入力した内容を読み込もうとします。を使用%sした場合、一致する前に空白文字まで待機します。

このスレッドも役に立つかもしれません:一度失敗した後、scanf がユーザー入力を待たないのはなぜですか?

于 2012-11-13T16:45:14.183 に答える