以下C程序不會在屏幕上打印任何內容。爲什麼下面的程序不會生成任何可見的輸出?
我編譯的程序與gcc
:
#include<stdio.h>
main()
{
printf("hai");
for(;;);
}
以下C程序不會在屏幕上打印任何內容。爲什麼下面的程序不會生成任何可見的輸出?
我編譯的程序與gcc
:
#include<stdio.h>
main()
{
printf("hai");
for(;;);
}
最有可能的,stdout
是行緩衝。您的程序不會調用fflush
或發送換行符,以便緩衝區不會被寫出。
#include <stdio.h>
int main(void) {
printf("hai\n");
for(;;)
;
return 0;
}
也看到C FAQquestion 12.4和What's the correct declaration of main()?。
爲什麼downvote?未能從不返回的函數中包含「return 0」? – 2009-08-11 13:14:53
你甚至沒有修復他的包括錯字... – 2009-08-11 13:21:03
我downvoted因爲你有什麼不編譯。 – 2009-08-11 13:22:39
默認情況下,標準輸出趨於行緩衝,因此您沒有看到任何內容的原因是因爲您沒有刷新行。
這將工作:
#include <stdio.h>
int main (int argC, char *argV[])
{
printf("hai\n");
for(;;)
;
return 0;
}
或者,你可以fflush
標準輸出或使程序退出剛剛擺脫無限循環:
#include <stdio.h>
int main (int argC, char *argV[])
{
printf("hai");
return 0;
}
,但你可能想換行反正有。
這是由stdio中發生的緩衝引起的(即,除非通過包含\ n或fflush來告訴它,否則不會立即輸出)。請參閱Write to stdout and printf output not interleaved這說明了這一點。
(附註:或編譯器是不是在#包括錯字高興)
您的(;;)循環停止從被刷新流。正如其他人所建議的那樣,在正在輸出的字符串中添加一個換行符,或者明確地刷新流:
fflush(stdout);
printf後。並糾正#include的拼寫。
#include拼寫錯誤... – richsage 2009-08-11 13:05:56
這將不會編譯。 – 2009-08-11 13:06:11
是的,它不是,你的問題是什麼? – qrdl 2009-08-11 13:25:45