私が以下のプログラムを実行すると、出力が出ません。無限ループwhilefでのprintfでの異常な動作
#include <stdio.h>
int main()
{
printf("hello");
while(1)
{
}
return 0;
}
私はprintfコマンドを編集して文字列の最後に '\ n'文字を追加すると、期待される出力が得られます。最初のコードで何が起こっていますか?私はそれを理解できません。
私が以下のプログラムを実行すると、出力が出ません。無限ループwhilefでのprintfでの異常な動作
#include <stdio.h>
int main()
{
printf("hello");
while(1)
{
}
return 0;
}
私はprintfコマンドを編集して文字列の最後に '\ n'文字を追加すると、期待される出力が得られます。最初のコードで何が起こっていますか?私はそれを理解できません。
を試してみてください。
fflush(stdout);
に電話すると、強制的にバッファを端末にフラッシュできます。ちなみにstdin
をフラッシュしないでください。これは許可されていません。
はstdoutがフルラインが収集されるまで出力はデバイス(端末)に書かれていません。すなわちラインは、をバッファリングしているので、これがある
printf("hello\n");
または
printf("hello");
fflush(stdout)
'fflush(stdout)'は 'printf'の直後に現れます。 – lurker
@mbratch真。私は編集しました、ありがとうございます。 –
出力の最後に改行を印刷する必要があります。それ以外の場合は、未定義のビヘイビアが呼び出されます(少なくとも定義されていない可能性があります)。
「未定義のビヘイビアを呼び出す」とはどういう意味ですか? –
使用printf("hello\n");
詳細情報についてはthis questionへの回答を参照してください。
'fflush(stdout)'を呼び出すと無限ループになります。 –
出力がバッファされます。 @GrijeshChauhanが提案しているように、 'printf'の後ろに' fflush(stdout) 'を使ってください。入力関数( 'getchar'や' scanf'など)のように出力バッファをフラッシュする他の操作もありますが、コードスニペットからループが何をしているのかは不明です。 – lurker
[プログラムが最終的なprintfステートメントを実行しないのはなぜですか?](http://stackoverflow.com/questions/11277796/why-does-program-not-execute-final-printfstatement) – lurker