1. 程式人生 > >eclipse中scanf和printf的執行順序顛倒的解決方法

eclipse中scanf和printf的執行順序顛倒的解決方法

最近我利用Eclipse進行c語言開發時,發現當使用輸入輸出函式時,會出現一種奇怪的現象:必須在控制檯完全輸入資料後,控制檯才會輸出諸如提示輸入的語句及最終結果。

如下程式碼:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

int n = 0;
printf("Input a number: ");
scanf("%d", &n);
printf("/nThe number you entered was %d/n", n);
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}

編譯連結後的控制檯執行結果如下圖所示:

顯然,執行結果並不是我們需要的。

通過查閱資料,發現在Eclipse中在輸入數字前需要重新整理標準輸出stdout。

重新整理標準輸出可以通過兩種方式:一種是隱式提示,利用換行提示符完成(如常見的printf("\n")語句);另一種是顯式提示利用fflush(stdout)語句完成。在嘗試第一種失敗後,我嘗試了第二種方法,即使用fflush(stdout)語句,最終成功實現了控制檯先出現提示語句,在輸入數字。

調整後的程式碼如下:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

int n = 0;
printf("Input a number: ");
fflush(stdout);
scanf("%d", &n);
printf("\nThe number you entered was %d\n", n);
puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
return EXIT_SUCCESS;
}

相應的執行結果如下圖所示:


在此記錄,與大家分享。

參考博友文章:http://blog.csdn.net/rznice/article/details/5333338