プログラムの1つで誤ってscanf("%d\n",&val);
を使用しましたが、動作を理解できませんでした。関数が示しています。
int main(){
int val;
scanf("%d\n", &val);
printf("%d\n", val);
return 0;
}
これで、プログラムは2つの整数入力を必要とし、入力された最初の入力を出力します。その余分な\n
はどのような違いをもたらす必要がありますか?
検索しようとしましたが、scanf
のマニュアルを読んでも答えが見つかりませんでした。
'\n'
-または任意の空白文字-フォーマット文字列では、入力の空白文字のシーケンス全体(おそらく空)を消費します。したがって、scanf
は、次の空白以外の文字、または入力ストリームの終わりに遭遇したとき(たとえば、入力がファイルからリダイレクトされてその終わりに達したとき、またはCtrlキーを押しながらstdinを閉じた後)にのみ返されます。 -D)。
Linuxボックスのman scanf
から:
ディレクティブは次のいずれかです。
空白文字のシーケンス(スペース、タブ、改行など。isspace(3)を参照)。このディレクティブは、入力内の空白を含め、任意の量の空白に一致します。
ところで、%d
もディレクティブです。
したがって、"%d\n"
には2つのディレクティブがあり、最初のディレクティブは数値を読み取り、2番目のディレクティブは...行末を含む任意の量の空白を読み取ります。空白以外の文字を入力して停止する必要があります。