2013-11-03 48 views
1

我在Fedora 20上使用Anjuta和gdb,並創建了C Makefile項目。代碼如下所示:爲什麼在單步執行代碼時printf輸出不會立即顯示?

#include <stdio.h> 

int main (void) 
{ 
° printf ("1"); 
° printf ("2"); 
° printf ("3"); 

    return (0); 
} 

°表示我在該位置設置斷點。

現在當我調試代碼時,沒有輸出,而當前行是這些printf函數之一。只有當我退出主'123'出現在終端。

如果我將\ n添加到第二個printf參數中,則當我從斷點2移動到第三個時,出現'12'作爲輸出。

回答

4

默認情況下,stdout在寫入終端時被行緩衝,在寫入任何其他類型的流時被完全緩衝。由於您不打印任何換行符,輸出被緩衝。您可以使用setbuf()更改緩衝模式,以換行符結束每個字符串,或者當您要打印時使用換行符呼叫fflush()

3

這是因爲printf寫入到正好被緩衝的stdout。欲瞭解更多詳情,請參閱here.

+1

它始終緩衝...不是「碰巧是」 – texasbruce

+1

那麼,你可以通過調用setbuf() –

+1

@texasbruce stdout不總是緩衝。 1,它是實現定義的。第二如果緩衝與否,模式可以改變.. – chux

2

在每次printf後添加fflush(stdout)。你的輸出很小,並保持緩衝區,直到程序退出。

相關問題