scanf文について
Posted: 2010年9月14日(火) 19:11
はじめまして。
C言語の勉強を始めて2日目になります。
http://wisdom.sakura.ne.jp/programming/c/c7.html
↑こちらのサイトを参考に進めているのですが、
このページの例にあるswitch文の定数式が整数(partAとします)、文字定数(partBとします)のとき
partAのみの場合 →正常動作
partBのみの場合 →正常動作
partA+partBの場合 →不具合
partB+partAの場合 →正常動作
となってしまいます。
具体的には、partBがpartAの後ろにくる場合のみ、scanf("%c" , &ch); が実行されず、defaultが返ってきてしまいます。
scanfを記述する順序によって問題が発生しているのでしょうか?
問題点、解決法をご教授ください。
宜しくお願い致します。
■環境
WindowsXP Home SP3
Microsoft Visual C++ 2010 Express
■ソース
#include <stdio.h>
int main()
{
char ch;
int var;
/* partA ここから */
printf("あなたは猫耳が好きですか?\n");
printf("はい = 1\tいいえ = 2\t兎耳のほうが… = 3\n");
scanf("%d",&var);
switch (var) {
case 1:
printf("同士よ、共に全宇宙を猫耳に染めようぞ!\n\n");
break;
case 2:
printf("それじゃアキバは歩けないぜ、旦那\n\n");
break;
case 3:
printf("ウサギちゃんか…耳で空飛ぶんだぞ!\n\n");
break;
default:
printf("指定した数を選択してください\n\n");
}
/* partA ここまで */
/* partB ここから */
printf("今日の奈美はどこかおかしい\n突然不安にかられた僕は…\n\n");
printf("A\t「奈美ぃーー!どこだ、返事をしろー!!」\n");
printf("\t僕は奈美を必死で探した\n\n");
printf("B\t「猫耳ィー!どこだ、でじこーーー!!」\n");
printf("\t僕は男のロマンを叫んだ\n");
switch(ch) {
case 'A':
printf("まぁ、何をしたって屋敷は燃えるんだよね…\n僕はプレイヤーとして諦めた\n\n");
break;
case 'B':
printf("やはりこの世で最も美しいのは猫耳だ\n今日、改めてそれを確信した\n\n");
break;
default:
printf("AかBを選択してにょ\n\n");
}
/* partB ここまで */
getchar();
return 0;
}
C言語の勉強を始めて2日目になります。
http://wisdom.sakura.ne.jp/programming/c/c7.html
↑こちらのサイトを参考に進めているのですが、
このページの例にあるswitch文の定数式が整数(partAとします)、文字定数(partBとします)のとき
partAのみの場合 →正常動作
partBのみの場合 →正常動作
partA+partBの場合 →不具合
partB+partAの場合 →正常動作
となってしまいます。
具体的には、partBがpartAの後ろにくる場合のみ、scanf("%c" , &ch); が実行されず、defaultが返ってきてしまいます。
scanfを記述する順序によって問題が発生しているのでしょうか?
問題点、解決法をご教授ください。
宜しくお願い致します。
■環境
WindowsXP Home SP3
Microsoft Visual C++ 2010 Express
■ソース
#include <stdio.h>
int main()
{
char ch;
int var;
/* partA ここから */
printf("あなたは猫耳が好きですか?\n");
printf("はい = 1\tいいえ = 2\t兎耳のほうが… = 3\n");
scanf("%d",&var);
switch (var) {
case 1:
printf("同士よ、共に全宇宙を猫耳に染めようぞ!\n\n");
break;
case 2:
printf("それじゃアキバは歩けないぜ、旦那\n\n");
break;
case 3:
printf("ウサギちゃんか…耳で空飛ぶんだぞ!\n\n");
break;
default:
printf("指定した数を選択してください\n\n");
}
/* partA ここまで */
/* partB ここから */
printf("今日の奈美はどこかおかしい\n突然不安にかられた僕は…\n\n");
printf("A\t「奈美ぃーー!どこだ、返事をしろー!!」\n");
printf("\t僕は奈美を必死で探した\n\n");
printf("B\t「猫耳ィー!どこだ、でじこーーー!!」\n");
printf("\t僕は男のロマンを叫んだ\n");
switch(ch) {
case 'A':
printf("まぁ、何をしたって屋敷は燃えるんだよね…\n僕はプレイヤーとして諦めた\n\n");
break;
case 'B':
printf("やはりこの世で最も美しいのは猫耳だ\n今日、改めてそれを確信した\n\n");
break;
default:
printf("AかBを選択してにょ\n\n");
}
/* partB ここまで */
getchar();
return 0;
}