[英]C program output in wrong order Eclipse
我已經在我的Windows機器上設置了Eclipse進行c編程,我已經成功運行了一個“hello,world”程序。 但是,當我嘗試請求用戶輸入並運行程序時,Eclipse上的控制台顯示的順序錯誤。
這就是我所擁有的
#include <stdio.h>
int main(void){
char letter;
printf("Please enter a letter:\n");
scanf(" %c, &letter);
printf("The letter you have selected is: %c", letter);
return 0;
}
這個程序構建得很好,它在Eclipse之外運行得很好。 但是當我在Eclipse中運行它時,我獲得了輸出:
E <--- (this is my user input)
Please enter a letter:
The letter you have selected is: E
我不確定為什么輸出執行順序錯誤,所以任何幫助都會非常感激! 謝謝。
聽起來Eclipse正在緩沖程序的輸出而不是立即顯示它。 這表明“在Eclipse中運行”功能並非旨在運行交互式程序。
你可以嘗試添加fflush(stdout);
在第一個printf
,你不應該這樣做只是為了讓你的程序在特定的環境中工作。
是的,Eclipse會在輸出窗口出現之前緩沖一定量的輸出(我不記得有多少輸出)
。 Eclipse通過完全緩沖的管道與連接的進程進行通信。 在調用fflush()
或緩沖區已滿之前,它不會刷新。 我發現在使用Eclipse進行調試時,如果我將以下內容放在應用程序的開頭附近,那么事情最有效:
setvbuf(stdout, NULL, _IONBF, 0);
這將導致stdout
在寫入時立即刷新。 如果你想用它進行調試,否則關閉它,你可以有條件地編譯它:
#ifdef DEBUG
setvbuf(stdout, NULL, _IONBF, 0);
#endif
無需在任何地方放置fflush()
。
這是我自己第一次遇到這個問題時找到解決方案的地方。
http://wiki.eclipse.org/CDT/User/FAQ#Eclipse_console_does_not_show_output_on_Windows
Eclipse的控制台不是真正的控制台或終端,而是eclipse通過管道進行通信,管道完全緩沖而不是行緩沖。 這就是換行符'\\ n'不會導致刷新緩沖區的原因。
嘗試添加fflush(stdout);
在第一次printf
。 如果Eclipse在'\\n'
之后沒有自動刷新,這有很大的幫助機會。
是的, fflush()
緩沖區是保持控制台屏幕更新所必需的...
...但請伙計們,這不是Eclipse的錯誤 - 輸出可能會失去同步,但是庫正在使用中!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.