2014-10-03 132 views
2

我用Eclipse編譯c代碼,但突然間所有的代碼都遇到了麻煩,以前都是正確的。Eclipse編譯器的問題

例如,如果我想使用scanf輸入一個參數,在scanf之前我會用一個printf語句來引導用戶。像printf(「鍵入大小\ n」);但是在Console中編譯之後,我需要先輸入大小,然後彈出printf(「type size \ n」)命令,這應該是相反的。

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

void try(int a); 

int main(void) 
{ 
    int a; 

    printf("type the size\n"); 
    try(a); 

    return 0; 
} 

void try(int a) 
{ 
    scanf("%d", &a); 
    printf("%d\n", a); 
} 

結果:型 大小選擇2 我需要先輸入一個數,這裏就像我需要2型,然後再在「輸入大小」剛彈出的大小。

這裏就是我想:

型大小選擇2

+0

Eclipse是不是編譯器... – Lundin 2014-10-03 09:50:48

+0

對不起,我使用Eclipse和MinGW GCC編碼C – user3595689 2014-10-03 09:52:51

+2

另外,'try(a)'不會將輸入的值傳遞給函數。你需要傳遞一個指針給它,而不是把它寫到原地,或者更好的辦法是從函數和'a = try();'返回'a'。最後'try'是C++中的保留字,所以選擇一個不同的名字可能會更好。 – Rup 2014-10-03 09:53:58

回答

3

它的大小bug in eclipse,這已經報道了大多數使用Eclipse和MinGW的人。

爲了克服這個問題,你可以每次調用後使用fflush(stdout)printf或使用的main開始執行以下操作:

setvbuf(stdout, NULL, _IONBF, 0); 
setvbuf(stderr, NULL, _IONBF, 0); 

這將導致每當被寫入到stdoutstderr立即沖洗。

+0

好吧我會嘗試,但昨天都很好,歡呼 – user3595689 2014-10-03 09:55:17

0

試試這個,例如,

#include <stdio.h> 
#include <stdlib.h> 
void try(int *a); 
int main() { 
int a; 
printf("type the size\n"); 
fflush(stdout); 
try(&a); 
return 0; 
} 
void try(int *a){ 
scanf("%d", a); 
printf("%d\n", *a); 
fflush(stdout); 
return; 
} 

此外,您還需要得到Â嘗試回到主設定的值,這樣,你需要通過AA指針如圖

+0

@ user694733,編輯我的答案,upvote請問 – 2014-10-03 09:57:43

+0

我不認爲答案是錯誤的後,我的編輯 – 2014-10-03 09:58:36

+0

這並不能解決實際問題。在'tryf'的'scanf'之前,第一個'printf'緩衝區沒有被刷新。 C標準澄清了在第一次遇到'scanf'之前應該刷新它,所以這顯然是Eclipse中的一個錯誤。一種解決方法是通過'fflush'標準函數強制執行它,正如@CoolGuy指出的那樣。 – 2014-10-03 10:03:57