0

for ループの直後に、プログラム制御が 3 番目の printf に到達しない理由がわかりません。

printf3 番目の印刷が行われないのはなぜですか?

for ループを while ループに変更しても、印刷されません。

プログラムと出力は次のとおりです。

main()
{
    double nc;

    printf ("Why does this work, nc = %f\n", nc);
    for (nc = 0; getchar() != EOF; ++nc)
    {
        printf ("%.0f\n", nc);
    }
    printf ("Why does this work, nc = %f", nc);
}

出力は次のとおりです。

Why does this work, nc = 0.000000
test
0
1
2
3
4
4

2 に答える 2

4

私にとっては問題なく動作します。どのようにプログラムを終了しようとしていますか? によって入力として が検出されると、ループforは終了する必要があります。EOFgetchar()

EOFWindows では( Control-Z) 、Linux/Unix では( ) です。これを入力すると、ループが終了し、最終的にその出力が表示されます。^ZControl-D^Dprintf()

最後のメモとして (@DanielFisher も言及しているように)、特定の実装で必要になる可能性があるため'\n'、最終printf()呼び出しの最後に a を追加します。そうしないと、プログラムの動作が未定義になる可能性があります (@KeithThompson と @AndreyT がこれを指摘してくれてありがとう)コメントで):

 printf ("Why does this work, nc = %f\n", nc);
于 2012-06-30T21:29:10.570 に答える
0

printfバッファリングされているため、最終行表示されない場合があります。これは、関数がデータを出力 (端末) に入れる前にデータを蓄積するため、 を呼び出してprintfも直接出力されない場合があることを意味します。

fflush最後の printf の後に を呼び出すと、バッファーに残っているすべてが端末に配置されます。また、改行を要求するたびにバッファがフラッシュされます。

于 2012-06-30T21:59:07.230 に答える