當我運行下面的程序時,我沒有得到任何輸出。帶有無限while循環的printf的異常行爲
#include <stdio.h>
int main()
{
printf("hello");
while(1)
{
}
return 0;
}
而如果我編輯printf命令添加'\ n'字符到字符串的末尾,那麼預期的輸出。第一個代碼中發生了什麼?我簡直無法理解它。
當我運行下面的程序時,我沒有得到任何輸出。帶有無限while循環的printf的異常行爲
#include <stdio.h>
int main()
{
printf("hello");
while(1)
{
}
return 0;
}
而如果我編輯printf命令添加'\ n'字符到字符串的末尾,那麼預期的輸出。第一個代碼中發生了什麼?我簡直無法理解它。
這是因爲stdout是行緩衝,即,輸出不被寫入到設備(終端),直到一個完整的行已被收集。
您可以撥打fflush(stdout);
強制緩衝區刷新到終端。順便嘗試沖洗stdin
,這是不允許的。
嘗試
printf("hello\n");
或
printf("hello");
fflush(stdout)
您應該指出'fflush(stdout)'在'printf'後面出現。 – lurker
@mbratch真的。我編輯了,謝謝。 –
您應該在輸出結尾處打印換行符。否則,它會調用未定義的行爲(至少可能未定義)。
你是什麼意思「調用(可能)未定義的行爲」? –
使用printf("hello\n");
欲瞭解更多信息請參閱答案this question。
調用'fflush(stdout)'順便說一句,你有無限循環。 –
輸出被緩衝。你需要在字符串末尾加上'\ n'來打印出來,或者在你的'printf'後面使用'fflush(stdout)'作爲@GrijeshChauhan的建議。還有其他一些操作會刷新輸出緩衝區,比如輸入函數('getchar'或'scanf'),但從代碼片段中不清楚你的循環正在做什麼。 – lurker
[爲什麼程序不能執行最終的printf語句?]可能的重複(http://stackoverflow.com/questions/11277796/why-does-program-not-execute-final-printf-statement) – lurker