2017-09-06 17 views
0

私は初心者のプログラマで、C言語を導入しています。私はscanf()が動作する方法について何か根本的なものを見逃しています。私は、コードを実行すると、私はデバッグを停止するまで、コンソールは黒のままscanf()はキーボードからの入力をどこから読み込みますか?

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

int main(void) { 
    int userBookSelection; 
    scanf("%i", &userBookSelection); 
    printf("Printing userBookSelection: %i", userBookSelection); 

    return EXIT_SUCCESS; 
} 

:私はこのようなコードで、キーボードからの単一のintを読みたいです。キーボード入力を待っているカーソルはありません。私はデバッグを停止すると、私は、コンソールでこの出力を見ることができ、同じ毎回:

印刷userBookSelection:2130567168

私はWindows上でのMinGW GCCコンパイラとEclipseでデバッグをしています。コードの構文は正しいようです - これを実現するために私のビルドパスに何か問題がある可能性がありますか?私はscanf()がキーボード入力を読み込んでいない理由を知る必要があります。

+0

コードをどのように実行していますか? – SLaks

+1

私はあなたのコードを実行するときに意図したとおりに動作します – Tyler

+0

示されているプログラムは正しいISO Cです(ポイントまで: 'scanf'は指定されたとおりに破られています。運動はうまくいく)、意図どおりに動くはずです。 _正しい---どのコンパイラ、デバッガ、コンソール、オペレーティングシステムなどを使用していますか?何も出てこない。 – zwol

答えて

0

私はこのバグを処理する教授からのコードを入手しました。EclipseやMinGWに必要な解決策であるかどうかはわかりません。いずれにせよ、ここで追加のラインとのコードです:

int main(void) { 
    int userBookSelection; 
    setvbuf (stdout, NULL, _IONBF, 0);//<---The magic line 

    scanf("%i", &userBookSelection); 
    printf("Printing userBookSelection: %i", userBookSelection); 

    return EXIT_SUCCESS; 
} 

は)私は(何はsetvbuf()やっているとどのようにscanfの、何が起こっている上の任意の追加的な知恵をいただければと思い、より根本的に動作します。

+0

これは、Eclipse、MinGW、および/またはWindowsの "コンソール"の奇妙なものでなければなりません。C仕様のみで 'setvbuf'を' stdout'に適用すると、 'scanf'の呼び出しに影響しません'stdin'でのみ)。それ以上はあなたを助けることはできません。 – zwol

関連する問題