• ベストアンサー

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にちゃんと入りました。

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1
cern5100
質問者

お礼

ピンポイントにありがとうございました。

その他の回答 (2)

回答No.3

#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)
回答No.2

7を入力した後のエンターがバッファに残っているためです。 printf("整数を入力せよ a:"); scanf("%d",&a); ・・・(1) scanf("%c",&dummy); printf("文字を入力せよ b:"); scanf("%c",&b); ・・・(2) とダミーを入力するようにすると動くと思います。

関連するQ&A