switch制御
多分岐プログラム
ifステートメントによるプログラムフロー制御は「択一分岐」向けでした
ですが、複数の選択による分岐の場合if文では複雑になりがちです
そこで、複数分岐にはswitchステートメントを用います
switchステートメントは指定された値を複数のcaseと比較し、一致したcaseから実行します
switch(値) {
case 定数:
ステートメント;
case n:
ステートメント;
default:
ステートメント;
}
caseは ANSI C 標準で最低限257まで分岐を作ることができます
switchで指定した値がcaseのあとの定数と一致すれば、そのcaseから実行します
「caseから」というのに注目してほしいのですが、そのcaseだけを実行するわけではないのです
switchステートメントは一致したcase以降全て(switchステートメントの最後まで)を実行しようとします
ですがこれではやりにくいので、breakステートメントを使います
breakステートメントは現在の制御ステートメントから抜け出す命令で、switch以外でも使われます(後記)
全てのケースに該当がなかった場合はdefaultを実行します
以下のプログラムを参照してください
#include <stdio.h>
int main()
{
int var;
printf("あなたは猫耳が好きですか?\n");
printf("はい = 1\tいいえ = 2\t兎耳のほうが… = 3\n");
scanf("%d",&var);
switch (var) {
case 1:
printf("同士よ、共に全宇宙を猫耳に染めようぞ!");
break;
case 2:
printf("それじゃアキバは歩けないぜ、旦那");
break;
case 3:
printf("ウサギちゃんか…耳で空飛ぶんだぞ!");
break;
default:
printf("指定した数を選択してください");
}
return 0;
}
ここで大切なことは、caseで指定できるのは定数ということです
if文では条件式を評価して実行することができましたが、switchのcaseで指定できるのは定数です
このプログラムでは、入力された値 var をswitchの比較に用いています
case 1: はvarに代入されている内容が1だった時にbreakまで、もしくは文の最後まで実行されます
注意としては、switchステートメントのcaseの定数で同じ値は使えないということです
また、caseが持つ定数は文字でもかまいません
C言語では、1つの文字を表現するのにはシングルクォーテーションを使うんでしたね
もちろんswitchで使うときも同様です
ここでひとつ、弟○草バリのプログラムを作ってみましょうか
#include <stdio.h>
int main()
{
char var;
printf("今日の奈美はどこかおかしい\n突然不安にかられた僕は…\n\n");
printf("A\t「奈美ぃーー!どこだ、返事をしろー!!」\n");
printf("\t僕は奈美を必死で探した\n\n");
printf("B\t「猫耳ィー!どこだ、でじこーーー!!」\n");
printf("\t僕は男のロマンを叫んだ\n");
scanf("%c" , &var);
switch(var) {
case 'A':
printf("まぁ、何をしたって屋敷は燃えるんだよね…\n僕はプレイヤーとして諦めた");
break;
case 'B':
printf("やはりこの世で最も美しいのは猫耳だ\n今日、改めてそれを確信した");
break;
default:
printf("AかBを選択してにょ");
}
return 0;
}
これまでのプログラム知識だけでも十分サウンドノベルならず、コンソールノベルが作れますね(笑)
大切なのは発想ですよ。がんばって仕様を覚えたら、あとは発想です
switch()
switch (expression) {
case const-expression:
statements;
...
[default:
statements;
...]
}
expressionと一致したconst-expressionを持つcaseからstatementsを実行します
一致するcaseがない場合はdefaultを実行します
expression case比較するための式を評価します
const-expression 定数式を指定します
statements 実行するステートメントを指定します