2012-12-02 119 views
2

在嘗試調試某些C代碼時,我發現如果放在無限循環之前,printf()將不會執行。有人知道爲什麼嗎?實際上這不是什麼大不了的事情,但對於調試來說這是一場噩夢。打印語句在無限循環之前不會打印

#include<stdio.h> 

int main() 
{ 
    int data; 

    printf("This prints fine.\n"); 

    printf("Enter data: "); 
    scanf("%d", &data); 

    printf("This should print but it doesn't.\n"); 

    while(1) 
    { 
    //Infinite Loop 
    } 

    return 0; 
} 
+3

試過? 'fflush(stdout)' – MarcDefiant

+0

是的,這是有效的。這裏到底發生了什麼? – amishjack

+3

我更喜歡將調試信息打印到stderr,它通常不會被緩衝。 –

回答

2

在調用printf()時,輸出在程序終止或遇到換行符後顯示。 但是由於您在printf()之後調用無限循環,程序不會終止,並且不會顯示緩衝區中的輸出。

使用fflush(stdout)迫使從緩衝器輸出將被顯示

stdout 標準輸出數據流被輸出的應用程序的默認目的地。在大多數系統中,它通常默認指向文本控制檯(通常在屏幕上)。

fflush()功能使系統清空緩衝區

0

嘗試__fpurge(標準輸出),它會清除輸出緩衝區

0

他們是一個叫的線緩衝器及緩衝塊的概念。每個你想要寫入屏幕的東西都會在緩衝區中。行緩衝器意味着當新行[\ n]發現它將「刷新緩衝區」時,意味着你的字符串將會在屏幕上打印,塊緩衝器意味着它們將被固定爲塊大小,除非該塊滿了,否則不會打印在屏幕。在上面的情況下新行[\ n]足以打印