2017-07-21 5 views
1

これは私のコード[注:私は、Windowsプラットフォーム上でC/C++用のEclipseを使用しています]でprintfが期待どおりに呼び出されないのはなぜですか?

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

int main(void) { 
    int num; 
    printf("Enter a number:\n"); 
    scanf("%d",&num); 
    if(num%2==0) 
     printf("Number is Even"); 
    else 
     printf("Number is Odd"); 
    return EXIT_SUCCESS; 
} 

私は最初だけで、その後のprintfが呼ばれる整数を入力する必要が...私は最初のprintfを呼び出したいですIntegerに入る前に私はここで間違っていますか?

例えばこれは私が

6 
Enter a number: 
Number is Even 

と予想される出力を得る出力は、バッファされた出力を印刷するには最初のprintfの後にfflush(標準出力)を呼び出すことができます

Enter a number: 
6 
Number is Even 
+1

'scanf'が返されないか、' printf'の最後の呼び出しが出力を生成しないという問題はありますか? –

+0

[MCVE]を投稿してください。具体的には、使用している環境。また、通常のシェルを使用しているのですか、ファイルやパイプから入出力を読み書きしていますか? – EOF

+1

プログラムが 'stdin/stdout'を「対話型デバイス」として認識しない場合、プログラムは完全にバッファされます。この場合、出力は 'fflush(stdout)'(または他の多くの関数呼び出しの1つ)の呼び出しに遭遇するまでバッファリングされます。 – EOF

答えて

0

です。しかし、将来的にはより多くのprintfsでプログラムを拡張することを考えれば、すべてのprintfの後にfflushを追加することはオーバーヘッドになります。だから、あなただけのすべてのprintfを前に

はsetbuf(STDOUT、NULL)

を追加することができます。 これにより、出力がバッファされず、瞬時に印刷物が表示されます。

関連する問題