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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
嵐山二世

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

#1

投稿記事 by 嵐山二世 » 7年前

初めて書かせていただきます。
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を入力してください無効な値です」と永遠と出力していきます。 原因はなんででしょう?

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

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

#2

投稿記事 by beatle » 7年前

1つめのscanfは%cなので、2回目の読み取りのときに改行文字を読み取るからです。
2つめのscanfは%dなので、数値以外を読み取らず、標準入力が消費されないからです。

nil
記事: 428
登録日時: 8年前

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

#3

投稿記事 by nil » 7年前

scanfを使って一度char配列に入力された文字列を格納した後に
sscanfを用いてデータを変数に格納すれば良いと思います。

嵐山二世

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

#4

投稿記事 by 嵐山二世 » 7年前

うまくいきました
ありがとございます

閉鎖

“C言語何でも質問掲示板” へ戻る