2016-03-20 7 views
2

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/

お返事ありがとうございます。

+0

JetBrainsのより良いIDE:CLionをお試しください。なぜ誰かがEclipseを使用するのか分かりません。 – duffymo

+0

@duffymo:無料ですか? :)私はC/C + +のバージョンを試したので、私はJava用のEclipseを使用しています。私は実際にC/C++用のSublime Textのようなテキストエディタを使用しています。 – David

+0

これは私がこれまで使用した唯一の理由です。私は何か良いことを学んだことがうれしい。 – duffymo

答えて

1

出力がバッファされています。改行文字がバッファをフラッシュし、その結果を画面に表示します。だからあなたが\nを追加したときに、あなたはその発行所を持っていないのです。

また、printfステートメントの後にfflush(stdout);を追加してみることもできます。

また、Eclipseの代わりにMac用のXcodeを使用することをお勧めします。

関連する問題