電子書籍の厳選無料作品が豊富!

printf("整数を入力せよ a:");
scanf("%d",&a); ・・・(1)
printf("文字を入力せよ b:");
scanf("%c",&b); ・・・(2)

として実行すると
例えば整数7を入力してエンターを押すと
aにはちゃんと7が入るのですが
bの入力を待たずに入力しないままプログラムが流れてしまいます。

(1)と(2)の順番を逆にすると1つずつ入力できるのですが、
なぜそうなるのか意味がわかりません。
あと試しに7yと入力してみたら7がa、yがbにちゃんと入りました。

A 回答 (3件)

    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/22 21:42

#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つずつ入力できるのですが、

数字が得られるまで(改行,空白,タブ等が)読み飛ばされるからです。
    • good
    • 0

7を入力した後のエンターがバッファに残っているためです。




printf("整数を入力せよ a:");
scanf("%d",&a); ・・・(1)

scanf("%c",&dummy);

printf("文字を入力せよ b:");
scanf("%c",&b); ・・・(2)

とダミーを入力するようにすると動くと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!