
cで偶数と奇数を見つける簡単なコードを書いた。
#include <stdio.h>
int main() {
int num;
printf("Enter an integer: ");
scanf(" %d", &num);
(num % 2 == 0) ? printf("%d is even.", num) : printf("%d is odd.", num);
return 0;
}
コードは停止せずに実行を開始し、次のメッセージを表示します。
[Running] cd "/home/atharva/Projects/c c++/" && gcc Even_odd.c -o Even_odd && "/home/atharva/Projects/c c++/"Even_odd
私はUbuntuを使用しています。何をすべきですか?
答え1
プログラムは実行中ですが、出力はバッファリングされているため、プログラムの出力は表示されません。
printf()
出力文字列は末尾に改行文字で区切られていないため、出力はバッファリングされます。標準ライブラリは、改行文字が出力されるまで、またはfflush()
出力ストリームを明示的に呼び出すまで出力をバッファリングします。このバッファリングは効率のために行われる。
1つの解決策は、最後に改行文字を使用して文字列を出力することです。
printf("Enter an integer:\n");
...または明示的に呼び出しますfflush()
。
printf("Enter an integer: ");
fflush(stdout);
しかし、正しいこれを行う方法は、他のほとんどのUnixユーティリティと同様に、標準エラーストリームからユーザー対話用のテキストを出力することです。
fprintf(stderr, "Enter an integer: ");
デフォルトでは、標準エラーストリームはバッファリングされません。
コードの他の文もprintf()
同じ問題を抱えており、出力する文字列に改行文字を追加する必要があります(ユーザー対話メッセージではなく結果を出力するため)。
また見なさい:
答え2
あなたの例はコマンドラインから私に効果的です。
Even_odd.c
次にコードをコピーしてください。
make Even_odd # A quicker alternative to "gcc Even_odd.c -o Even_odd"
./Even_odd
Enter an integer:
実際には、コマンドラインで実行しない場合と間にfflush(stdout)
追加printf
する必要がありますsscanf
。このためです標準出力ラインバッファリングされており、入力が要求されるまでラインが端末にフラッシュ(記録)されないことがありますsscanf
。
\n
結果文字列の末尾に追加することを忘れないでください。たとえば、次のようになります。printf("%d is even.\n", num)