簡體   English   中英

C程序以錯誤的順序輸出Eclipse

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM