2017-05-25 54 views
0

まず第一に同じタイトルの別の質問がありますが、そこに提供されている解決策は私のためには機能しませんでした。私は通常、それを実行したときにOther questionscanfはeclipseでデバッグモードで入力を受け付けませんか?

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

int main() 
{ 
    int a, b, c; 
    fflush(stdout);//suggested solution in other question 
    scanf("%d%d%d", &a, &b, &c); 
    printf("Values entered: %d %d %d\n", a, b, c); 
    return 0; 
} 

コードが正常に動作します。

出力

1 2 3 
Values entered: 1 2 3 

しかし、ときに私は何も印刷されないデバッグモードで実行します。変数の上にカーソルを置くと、これらの値があります。

:56

B:6422420

C:別の解決策が提案6422420

は、mainメソッドの開始にこのコードを配置することでした。ポストで提案

int ch; 
    while ((ch = getchar()) != '\n' && ch != EOF); //suggested solution #1 

どちらのソリューションは私のために動作しませんでした。私はそれらを別々に試しました。

EDIT

OS:Windowsの10

コンパイラ:MinGWの

+0

コンパイラ(Eclipseは*コンパイルではありません)と使用しているオペレーティングシステムは何ですか? –

+0

コマンドラインでコンパイルすることをお勧めします。 Eclipseはあなたに物事を隠すだけです。 –

+0

CとC++は異なる言語ですので、プログラムについて質問するときに両方を指定しないでください。 –

答えて

0

が、私はそう、あなたのscanf形式にスペースを使用することをお勧めします、とそのリターン・カウントをテストするために:

a = b = c = 0; // better to clear variables, helpful for debugging at least 
int cnt = 0; 
if ((cnt=scanf(" %d %d %d", &a, &b, &c)) == 3) { 
    /// successful input 
    printf("Values entered: %d %d %d\n", a, b, c); 
} 
else { 
    /// failed input 
    printf("scanf failure cnt=%d error %s\n", cnt, strerror(errno)); 
} 
fflush(NULL); // probably not needed, at least when stdout is a terminal 

を慎重に読んでください。scanf(およびすべてのライブラリ関数の)ドキュメントはそれを使用してください。

ところで、EclipseはちょうどIDEまたは見せかけsource code editorで、あなたのコンパイラはGCCまたはClangことができた(そしておそらくあなたのコンパイラに適切なオプションを渡すためにあなたのIDEを設定することができます)。 scanf自体はC standard library(オペレーティングシステムkernelの上)に実装されています。

しかし、あなたは本当に(そうGCCを使用している場合gcc -Wall -Wextra -gでコンパイル)し、あなたのdebugger gdb(ブレークポイント、ステップ、変数照会、バックトレースすることによりステップを...)を使用する方法を学ぶために、すべての警告をあなたのコンパイラで&デバッグ情報を有効にする必要があります

fflushを使用して、プログラムをコンパイルして、ターミナルで実行する必要があります(Eclipseではなく、多くの便利なものを隠しています)。

+0

あなたのコードを試しました。 if条件を入力せずに 'perror(" scanf failure ");'部分にスキップします。 注:正常に動作します。これはデバッグモードでのみ発生します。 – Enzio

+0

しかし、あなたは 'scanf'の文書を注意深く読んだのですか?ところで、私はコードを少し改良しました。 –

関連する問題