1

次のコードの場合:(xが定義されていると仮定)

scanf("%d\n", &x);
printf("foo");

1を押してEnterキーを押すと、プログラムがfooを出力することを期待していますが、そうではありません。1、ENTER、2、ENTERを押して、fooが出力されることを確認する必要があります。

ここで問題は、scanfを返すために、なぜ何かに加えて別のENTERを入力する必要があるのか​​ということです。1、ENTER、ENTERを押しても機能しないため、scanfがフォーマット文字列よりも1つ多くのENTERを必要とすることはあり得ません。実際、scanfは、Enterキーをいくつ入力しても、他の何かを入力するまで待機し続けます。

Visual Studio 2010とMinGWでこの例を試しましたが、同じ結果が得られました。では、これはどのように説明できますか?これはWindows固有ですか?またはコンパイラに依存しますか?または、この種のscanfの使用により、未定義の動作が発生しますか?

4

1 に答える 1

5

scanf形式の文字列(および'\n'スペース、タブ'\r'、、、、)のは、scanfに空白を無視させます。'\f''\v'

ENTERは空白であるため、scanfは可能な限り多くの空白を無視し、空白以外のもの()を検出した場合にのみ停止し2ます。

于 2012-04-22T15:28:33.353 に答える