2013-10-09 154 views
2

我有這段代碼。打印前執行的掃描語句

#include <stdio.h> 
int main(void) 
{ 
    int dogs; 
    printf("How many dogs do you have?\n"); 
    scanf("%d", &dogs); 
    printf("So you have %d dog(s)!\n", dogs); 
    return 0; 
} 

據我所知,執行時,程序會說'你有多少狗',然後輸入一個數字。相反,我得到一個空白頁面,我必須先輸入一個數字。然後我得到

你有多少隻狗? 所以你有3只狗! (如果我輸入3)

我使用Eclipse + MinGW,它是我第一次使用C,所以我不知道我有/不得不設置。

+1

我會說你有問題與Eclipse。 [看它活着](http://ideone.com/VSeGaD)。 – WhozCraig

+0

我會這麼說。它在CodeBlocks上正常工作。不知道我有什麼。 –

+0

出於好奇,如果您嘗試在第一個'printf'和'scanf'之間刷新'stdout',Eclipse和MinGW仍然會失敗嗎? –

回答

1

我設法解決了這個問題。問題在於eclipse首先處理所有的掃描語句,然後處理所有的打印語句。如果你的程序有多個掃描語句,這將很難解決。

該修復有點簡單。從following link下載二進制修復程序。

然後,您需要將starter.exe粘貼到安裝Eclipse的路徑中。

在我的情況是這樣的日食\插件\ org.eclipse.cdt.core.win32.x86_64_5.2.0.201309180223 \ OS \ WIN32 \ x86_64的

你的可能非常一點。覆蓋現有的starter.exe,它應該可以工作。

+0

工作...謝謝噸:D –

0

printf()緩衝區輸出。一般情況下(在UNIX中)stdlib足夠聰明,可以在讀取stdin之前刷新stdout,但MingW可能不是這種情況。考慮使用fflush()或輸出到stderr。

+0

'\ n'需要刷新輸出緩衝區,這不符合行爲。上面提到的鏈接表明'fflush(stdout)'在這裏確實有效,但這絕對是編譯器實際上是錯誤的罕見場合之一。 –