我試圖使用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/。
在此先感謝您的回答。
嘗試更好的IDE:來自JetBrains的CLion。我不明白爲什麼有人使用Eclipse。 – duffymo
@duffymo:因爲它是免費的? :)我使用Eclipse的Java所以我嘗試了他們的C/C++版本。我實際上使用文本編輯器如C/C++的Sublime Text .. – David
這是我曾經使用它的唯一原因。很高興我瞭解了更好的東西。 – duffymo