-1

出力 10 が来る理由を説明してください。

main()
{

   for(printf("1");!printf("0");printf("2"))
    {
    printf("hello");
    }   
}

出力:

10 
4

2 に答える 2

5

そのprintf(3) man ページによると、printf関数は戻ります

印刷される文字数 (文字列への出力を終了するために使用される null バイトを除く)

したがって、 の初期化部分はfor1 回実行されますprintf("1")1文字を のバッファに入れstdoutます。次に、 が評価されるため、条件が評価さ!printf("0");れ、文字が のバッファにprintf("0")入れられ、出力文字数が返されます。つまり、条件が false であり、ループが存在します。0stdout1for

最後にmain、プログラムを終了します。その時点で、stdoutバッファのみがフラッシュされます。

分かりやすく言えば、ありそうもない理由でstdoutが正常に記述できない場合、プログラムは異なる動作をします。

于 2012-10-03T05:15:42.053 に答える
0

printf("1") では、ステートメントをそのまま実行するためです。次に、printf("0") は画面に 0 を出力し、値 1 を返します。これを否定すると、C では false に等しい値が返されます。そのため、for ループは終了条件を満たして終了します。

于 2012-10-03T05:22:04.980 に答える