ページ 11

while文を用いた無限ループとswitch文

Posted: 2013年3月20日(水) 19:02
by 嵐山二世
初めて書かせていただきます。
while文を用いた無限ループを試しているのですが、

コード:

#include<stdio.h>

int main()
{
	char x = 0;
	int y = 0;

	while (1)
	{

	printf("AかBを入力してください");
	scanf("%c" ,&x);


		switch(x)
		{
			case 'a':
			case 'A':
				printf("Aが入力されました");
				break;
			case 'b':
			case 'B':
				printf("Bが入力されました");
				break;
			default:
				printf("無効なアルファベットです\n");
				continue;
		}
		break;
	}

	while(1)
	{

	printf("\n1か2を入力してください");
	scanf("%d" ,&y);

		switch(y)
		{
			case 1:
				printf("1が入力されました");
				break;
			case 2:
				printf("2が入力されました");
				break;
			default:
				printf("無効な値です");
				continue;
		}
		break;
	}
}
と入力して実行したのですが、一つ目のswitch文はAとB以外のものを入力したところ、無効なアルファベットです、と正常に表示された後「AかBを入力してください無効なアルファベットです」と勝手にに出てしまいます。
また、二つ目のswitch文は数字以外を入力すると「1か2を入力してください無効な値です」と永遠と出力していきます。 原因はなんででしょう?

Re: while文を用いた無限ループとswitch文

Posted: 2013年3月20日(水) 19:46
by beatle
1つめのscanfは%cなので、2回目の読み取りのときに改行文字を読み取るからです。
2つめのscanfは%dなので、数値以外を読み取らず、標準入力が消費されないからです。

Re: while文を用いた無限ループとswitch文

Posted: 2013年3月20日(水) 19:55
by nil
scanfを使って一度char配列に入力された文字列を格納した後に
sscanfを用いてデータを変数に格納すれば良いと思います。

Re: while文を用いた無限ループとswitch文

Posted: 2013年3月20日(水) 20:48
by 嵐山二世
うまくいきました
ありがとございます