これに重大な問題がある...
printf("> ");
int x = getchar();
printf("got the number: %d", scanf("%d", &x));
> 1234
got the number: 1
これがあなたが探しているものであるかどうかはよくわかりませんが、あなたの質問が<stdio.h>
を使用して整数を読み取る方法である場合、適切な構文は
int myInt;
scanf("%d", &myInt);
もちろん、これが正しく機能することを保証するために多くのエラー処理を行う必要がありますが、これは良い出発点です。特に、次の場合に対処する必要があります。
stdin
ファイルは閉じられているか壊れているため、何も取得できません。これを確認するには、次のようにscanf
からのリターンコードをキャプチャします。
int result = scanf("%d", &myInt);
読み取り中にstdin
でエラーが発生した場合、result
はEOF
になり、次のようなエラーを確認できます。
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
一方、ユーザーがガベージテキスト文字列などの無効なものを入力した場合、問題のある入力をすべて使用するまで、stdin
から文字を読み取る必要があります。これは、何も読み取られなかった場合にscanf
が0を返すという事実を使用して、次のように実行できます。
int myInt;
int result = scanf("%d", &myInt);
if (result == EOF) {
/* ... you're not going to get any input ... */
}
if (result == 0) {
while (fgetc(stdin) != '\n') // Read until a newline is found
;
}
お役に立てれば!
[〜#〜] edit [〜#〜]:より詳細な質問に対する回答として、より適切な回答を示します。 :-)
このコードの問題は、書くときに
printf("got the number: %d", scanf("%d", &x));
これは、scanf
からの戻りコードを出力します。これは、ストリームエラーの場合はEOF
、何も読み取られなかった場合は0
、それ以外の場合は1
です。これは、特に、整数を入力すると、scanf
からステータスコードを印刷するため、読み取る番号ではないため、常に1
を印刷することを意味します。
これを修正するには、これを
int x;
scanf("%d", &x);
/* ... error checking as above ... */
printf("got the number: %d", x);
お役に立てれば!
典型的な方法はscanf
を使用することです:
int input_value;
scanf("%d", &input_value);
解決策は非常に簡単です...あなたはgetchar()を読んでいるので、入力バッファの最初の文字を取得します.scanfは第二に、改行文字までバッファ全体を読み取ります。
printf("> ");
int x;
scanf("%d", &x);
printf("got the number: %d", x);
> [Prompt expecting input, lets write:] 1234 [Enter]
got the number: 1234