web-dev-qa-db-ja.com

Cのscanf()で「\ n」を使用する

プログラムの1つで誤ってscanf("%d\n",&val);を使用しましたが、動作を理解できませんでした。関数が示しています。

int main(){
    int val;
    scanf("%d\n", &val);
    printf("%d\n", val);
    return 0;
}

これで、プログラムは2つの整数入力を必要とし、入力された最初の入力を出力します。その余分な\nはどのような違いをもたらす必要がありますか?

検索しようとしましたが、scanfのマニュアルを読んでも答えが見つかりませんでした。

16
nishchay2192

'\n'-または任意の空白文字-​​フォーマット文字列では、入力の空白文字のシーケンス全体(おそらく空)を消費します。したがって、scanfは、次の空白以外の文字、または入力ストリームの終わりに遭遇したとき(たとえば、入力がファイルからリダイレクトされてその終わりに達したとき、またはCtrlキーを押しながらstdinを閉じた後)にのみ返されます。 -D)。

9
Daniel Fischer

Linuxボックスのman scanfから:

ディレクティブは次のいずれかです。

空白文字のシーケンス(スペース、タブ、改行など。isspace(3)を参照)。このディレクティブは、入力内の空白を含め、任意の量の空白に一致します。

ところで、%dディレクティブです。

したがって、"%d\n"には2つのディレクティブがあり、最初のディレクティブは数値を読み取り、2番目のディレクティブは...行末を含む任意の量の空白を読み取ります。空白以外の文字を入力して停止する必要があります。

7
rodrigo