2014-12-06 90 views
0

我注意到我的一些程序在C++中的奇怪行爲,當我試圖弄清楚它是什麼時,我發現,控制檯輸出發生了錯誤。我用相同的行爲使用iostream和cstdio函數。當我在控制檯上打印某些東西時,它根本不顯示。這裏是我用於觀察這種奇怪行爲的代碼。 這段代碼propertly輸出一切(即使它不應該IMO):在簡單的C++程序中沒有控制檯輸出

#include <cstdio> 
using namespace std; 
int main(void) { 
    int a = 0; 
    scanf("%d", &a); 
    a++; 
    printf("result is %d", a); 
} 

這可是一個(正確的,我認爲)不顯示任何內容,只有在運行完消息

#include <cstdio> 
using namespace std; 
int main(void) { 
    int a = 0; 
    scanf("%d", &a); 
    a++; 
    printf("result is %d \n", a); 
} 

我也試過在「\ n」之前刪除空格,沒有任何區別。但是,當我在程序的最後放置更多與「\ n」相同的printf函數時,所有內容都可以正確顯示(當然是多次顯示)。 Iostream的行爲方式類似 - 使用endl不會導致任何內容出現在控制檯上。我究竟做錯了什麼?至於導致故障的原始代碼,我注意到在我的輸出中沒有出現任何東西,但在我的學校中,相同的代碼正確地輸出了所有內容。我正在NetBeans 8.0.2下工作。在此先感謝幫助

+2

這些代碼片段中沒有太多的C++。 – 2014-12-06 17:11:48

+1

至於你的問題,你是什麼意思,「不顯示任何東西」?您呼叫'scanf'會阻止*,直到您輸入新行。 – 2014-12-06 17:14:02

+0

由於您將此標記爲C++,請嘗試使用'cin'和'cout'。 :-) – 2014-12-06 17:14:15

回答

0

所有輸出數據在打印到控制檯之前都會被緩衝。您可以使用fflush\n來刷新輸出流並打印所有數據。

+0

是的,但這是奇怪的行爲 - 當我使用換行符時,什麼都不打印 - 就像緩衝區被刷新到其他地方而不是我的控制檯 – fifco 2014-12-06 17:25:32