printfがコンソールに表示されない
C言語を始めています。IDEとしてeclipse(juno)を使用しており、CDTプラグインをインストールしています。mingw64 (GCC Compiler)も解凍しました。動作するかどうか確認するために、非常に簡単なプログラムを書きました。これは私のコードです。
#include <stdio.h>
int main()
{
int age;
printf("Hello, please enter your age:\n");
scanf("%d", &age);
printf("Your age is %d", age);
return 0;
}
問題は、最初の printf
の文字列値で出力バッファが満たされるのに、コンソールに出力されないことです。数字を入力しなければならないのですが、その時だけバッファがすべてのデータをコンソールに流し込むので、コンソールには次のようなものが表示されます。
1
Hello, please enter your age:
Your age is 1
という期待されるものではなく
Hello, please enter your age:
1
Your age is 1
今、私は最初の printf
の後に fflush(stdout)
を使うことができることを発見しましたが、この解決策がエレガントで必要だとは思えません。これを克服する方法について何かアイデアがありますか?
編集 - 私は大学でこれを学んでいるので、コースで学んでいないものを使うことはできませんので、私が使えるのは printf
と scanf
だけです。
NEW EDIT - これについての説明が見つかったと思います。私は言ったように、Eclipseの中のコンソールビューに出力しています。不思議なのは、Windowsのコマンドラインからプログラムをコンパイルして実行すると、望みの結果が得られることです。したがって、eclipseは実際には出力をファイルに書き出し、それをコンソールウィンドウに表示しているのだと思います。どうすれば、eclipseの実行構成で本物のコマンドラインウィンドウを開かせることができるのでしょうか?
36
7
出力はバッファリングされています。
stdoutはデフォルトでline-bufferedなので、 '\n' はバッファをフラッシュすることになっています。 なぜ、あなたの場合はそうならないのでしょうか?わかりません。あなたのアプリケーション/環境についての詳細な情報が必要です。
ただし、setvbuf()でバッファリングを制御することができます。
これにより、標準出力は強制的にラインバッファリングされます。
これは標準出力を強制的にアンバッファリングにするので、 fflush()を使う必要はないでしょう。 プリントの数が多い場合、アプリケーションのパフォーマンスに重大な影響を与えることに注意してください。
どうやらこれはEclipseの既知のバグです。 このバグは、WONT-FIXの解決で解決されます。なぜなのかわかりません。 ここにリンクがあります: [Eclipse Cコンソールバグ][1]。
[1]:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 173732。
印刷する前に設定してみてください。
stdoutではなく、stderrに書き込んでみてはいかがでしょうか。
また、こちらの関連スレッドもご覧になってみてください。
他の人が指摘したように、コンソールまたはシェルがそれを見る機会がある前に、出力はあなたのプログラム内で緩衝することができます。
macを含むunixライクなシステムでは、「stdout」にはデフォルトでラインベースのバッファリングがあります。 これは、プログラムが改行が表示されるとすぐに「stdout」バッファを空にすることを意味します。
ただし、ウィンドウでは、改行は特別ではなくなり、完全なバッファリングが使用されます。 Windowsはラインバッファリングをまったくサポートしていません。 setvbufのmsdnページを参照してください。
したがって、Windowsでは、次のような「stdout」バッファリングを完全に停止することをお勧めします。
システム環境変数として、または日食プロジェクト(プロパティ->実行/デバッグ->編集)のいずれかで、
c:\ gygwin \ bin
をPATH
環境変数に追加します。1。 プロジェクトフォルダーに、「。gdbinit」テキストファイルを作成します。 gdbデバッガー構成が含まれます。 2。 「.gdbinit」を編集し、行(引用符なし)を追加します:「新しいコンソールをオンにする」。 3。 プロジェクトを右クリックすると、プロジェクトDebug>をクリックします。以下に示すように、「デバッグ構成」。 デバッグ構成。! 4。 [デバッガ]タブで、[GDBコマンドファイル]が[.gdbinit]ファイルを指すようにします。 それ以外の場合は、「。gdbinit」構成ファイルへのパスを入力します。 Gdb構成。! 5。 「適用」と「デバッグ」をクリックします。 以下に示すように、ネイティブDOSコマンドラインを発信する必要があります。 コンソール。!