Eclipse IDEとGDBデバッガを使用して、ユーザー入力を必要とするCプログラムをデバッグしようとしました。コンソールにユーザー入力を入力するたびに、入力が2回表示されました。言い換えれば、私の入力は同じ値でエコーされました。私は、次のCプログラムをデバッグする場合たとえば、:GDBを使用してEclipseでCプログラムをデバッグするときの奇妙な動作
Enter length: 2
2
Enter width: 3
3
Enter height: 4
4
Volume = 24
:
#include <stdio.h>
int main(void) {
int length, width, height;
printf("Enter length: ");
scanf("%d", &length);
printf("Enter width: ");
scanf("%d", &width);
printf("Enter height: ");
scanf("%d", &height);
printf("Volume = %d\n", length*width*height);
return 0;
}
は、コンソールは次のようになります。
ご覧のとおり、値2,3および4はそれぞれ2回表示されます。 (代わりに、デバッグの)このプログラムを実行すると期待された結果得られます。また
Enter length: 2
Enter width: 3
Enter height: 4
Volume = 24
を、私はprintf()
ステートメントの実行が遅れていることがわかり:私はすでに「ステップオーバー」をクリックしているが、中に示したものはありませんコンソール。この問題はより明白にするために、私たちはにコードを変更してみましょう:
#include <stdio.h>
int main(void) {
int length, width, height;
printf("Enter length: ");
printf("Enter length: "); // newly added line
printf("Enter length: "); // newly added line
scanf("%d", &length);
printf("Enter width: ");
scanf("%d", &width);
printf("Enter height: ");
scanf("%d", &height);
printf("Volume = %d\n", length*width*height);
return 0;
}
、文字列は「長さを入力します。長さを入力します。長さを入力します:」私はライン上のステップの後に、すべてを一度に表示されます。 9:scanf("%d", &length);
。しかし、私がprintf()
を呼び出すたびに改行文字 '\ n'を最後に追加すると、問題はなくなり、文字列は直ちにコンソールに出力されます。
私はこれらの2つの問題は軽微であることを知っていますが、OCDでは実際に何が起こっているのかを知りたいと思います。私はそれがEclipseが入力と出力をどのように扱うかと関係があると思いますか?しかし、やはりEclipseでJavaプログラムをデバッグするときに、これらの問題は表示されません。
PS。私はC/C++開発者のためのMac OS X El Capitan、Eclipse(Mars)IDE上で動作しています。ここで与えられた指示に従ってHomebrewを使ってGDBをインストールしました:http://ntraft.com/installing-gdb-on-os-x-mavericks/。
お返事ありがとうございます。
JetBrainsのより良いIDE:CLionをお試しください。なぜ誰かがEclipseを使用するのか分かりません。 – duffymo
@duffymo:無料ですか? :)私はC/C + +のバージョンを試したので、私はJava用のEclipseを使用しています。私は実際にC/C++用のSublime Textのようなテキストエディタを使用しています。 – David
これは私がこれまで使用した唯一の理由です。私は何か良いことを学んだことがうれしい。 – duffymo