22

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

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

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

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

4

2 に答える 2

14

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

于 2013-03-15T23:10:00.743 に答える
12

man scanf私のLinuxボックスから:

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

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

ところで、ディレクティブ%dでもあります。

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

于 2013-03-15T23:12:11.613 に答える