2016-03-20 52 views
2

我試圖使用Eclipse IDE和GDB調試器來調試需要用戶輸入的C程序。每次我在控制檯中輸入用戶輸入時,我的輸入都會顯示兩次。換句話說,我的輸入與相同的值相呼應。例如,如果我調試下面的C程序:使用GDB在Eclipse中調試C程序時出現奇怪的行爲

#include <stdio.h> 

int main(void) { 
    int length, width, height; 

    printf("Enter length: "); 
    scanf("%d", &length); 
    printf("Enter width: "); 
    scanf("%d", &width); 
    printf("Enter height: "); 
    scanf("%d", &height); 
    printf("Volume = %d\n", length*width*height); 

    return 0; 
} 

,那麼控制檯將是這個樣子:

Enter length: 2 
2 
Enter width: 3 
3 
Enter height: 4 
4 
Volume = 24 

如您所見,值2,3和4分別顯示兩次。運行這個程序(而非調試)給出預期的結果:

Enter length: 2 
Enter width: 3 
Enter height: 4 
Volume = 24 

此外,我注意到的printf()語句的執行被延遲:雖然我已經點擊了「步過」,沒有在上什麼都沒有安慰。爲了使這個問題更明顯,讓我們更改代碼以:

#include <stdio.h> 

int main(void) { 
    int length, width, height; 

    printf("Enter length: "); 
    printf("Enter length: "); // newly added line 
    printf("Enter length: "); // newly added line 
    scanf("%d", &length); 
    printf("Enter width: "); 
    scanf("%d", &width); 
    printf("Enter height: "); 
    scanf("%d", &height); 
    printf("Volume = %d\n", length*width*height); 

    return 0; 
} 

在這種情況下,字符串「輸入長度:輸入長度:輸入長度:」將顯示所有在一次,我跨過線之後9:scanf("%d", &length);。但是,如果我在每次撥打printf()時在末尾添加一個新行字符'\ n',則不會有任何問題,字符串將立即打印到控制檯。

我知道這兩個問題是微不足道的,但作爲強迫症我真的很想知道這裏發生了什麼。我想這與Eclipse如何處理輸入和輸出有關。但是,在Eclipse中調試Java程序時,我再也看不到這些問題。

PS。我在Mac OS X El Capitan,C/C++開發人員的Eclipse(Mars)IDE上運行,並按照此處給出的說明安裝了GDB和Homebrew:http://ntraft.com/installing-gdb-on-os-x-mavericks/

在此先感謝您的回答。

+0

嘗試更好的IDE:來自JetBrains的CLion。我不明白爲什麼有人使用Eclipse。 – duffymo

+0

@duffymo:因爲它是免費的? :)我使用Eclipse的Java所以我嘗試了他們的C/C++版本。我實際上使用文本編輯器如C/C++的Sublime Text .. – David

+0

這是我曾經使用它的唯一原因。很高興我瞭解了更好的東西。 – duffymo

回答

1

輸出被緩衝。新的一行字符刷新緩衝區並在屏幕上顯示結果。這就是爲什麼當你添加\n時你沒有這個問題。

或者,您可以嘗試在printf語句後添加fflush(stdout);

此外,我還建議你使用Mac代替Eclipse的Xcode。

相關問題