次のコードの場合:(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の使用により、未定義の動作が発生しますか?