- ベストアンサー
scanf()の順番
printf("整数を入力せよ a:"); scanf("%d",&a); ・・・(1) printf("文字を入力せよ b:"); scanf("%c",&b); ・・・(2) として実行すると 例えば整数7を入力してエンターを押すと aにはちゃんと7が入るのですが bの入力を待たずに入力しないままプログラムが流れてしまいます。 (1)と(2)の順番を逆にすると1つずつ入力できるのですが、 なぜそうなるのか意味がわかりません。 あと試しに7yと入力してみたら7がa、yがbにちゃんと入りました。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
#include <stdio.h> int main() { int a; char b; printf("整数を入力せよ a:"); scanf("%d",&a); printf("文字を入力せよ b:"); scanf("%c",&b); printf("%d %d\n", a, (int)b); return 0; } このコードを実行し、7を入力してエンターを押すと 7 10 と出力されます。 bは10、10は改行コードです。 つまり 「bの入力を待たずに入力しないままプログラムが流れて」 しまったのではなく、 「改行コードが文字として入力された」 のです。 > (1)と(2)の順番を逆にすると1つずつ入力できるのですが、 数字が得られるまで(改行,空白,タブ等が)読み飛ばされるからです。
- ok-kaneto
- ベストアンサー率39% (1798/4531)
7を入力した後のエンターがバッファに残っているためです。 printf("整数を入力せよ a:"); scanf("%d",&a); ・・・(1) scanf("%c",&dummy); printf("文字を入力せよ b:"); scanf("%c",&b); ・・・(2) とダミーを入力するようにすると動くと思います。
お礼
ピンポイントにありがとうございました。