eclipse中scanf和printf的執行順序顛倒的解決方法
阿新 • • 發佈:2019-01-22
最近我利用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