前回の補足として、制御文の色々な書き方を紹介します。
一行の文はカッコ{ }を省略することが出来ます。
if(ans == 'y') { printf("あなたはうそつきです。"); } else { printf("あなたは正直者です。\n"); } |
上のプログラムは、
if(ans == 'y') printf("あなたはうそつきです。"); else printf("あなたは正直者です。\n"); |
と書けます。
ただしカッコの中に2行以上ある場合は省略できません。
例えば、
if(ans == 'y') { printf("あなたは"); printf("うそつきです。"); } else { printf("あなたは"); printf("正直者です。\n"); } |
を
if(ans == 'y') printf("あなたは"); printf("うそつきです。"); else printf("あなたは"); printf("正直者です。\n"); |
とは書けません。
間違えやすいので、この講義ではカッコを付けて書くことを推奨します。
for文なども同じように一行のときだけ省略できます。
for(int i = 1; i < 6; i++) { printf("%d\n", a[i-1]); } |
は
for(int i = 1; i < 6; i++) printf("%d\n", a[i-1]); |
と書けます。他の文についても同様です。詳しくは自分でHELPやインターネットなどで調べてください。
break文
breakでfor文などの繰り返しを途中でやめることが出来ます。
for(int i = 1; i < 6; i++) { printf("1"); if(i == 3) { break; } } |
上のように書くと、iが3になった時点でfor文を強制的に終了します。
goto文
無条件に別の場所に処理を移したいときがあります。そのときにはgotoを使うといいときがあります。
int
main(int argc,
char* argv[]) { BACK: printf("1"); goto BACK; }
|
このプログラムは"1"を表示することを無限に繰り返すプログラムです。
BACK:はラベルでプログラムの場所に印を付けるために使います。goto BACK;とするとprintf("1");の手前に処理が移ります。
goto文は使いすぎるとプログラムが手におえないほど見づらくなるので、最近では使わないほうが良いといわれています。ただしごく稀に使うと良い場合があります。gotoが 本当に必要な場面は、せいぜい1万行に数回ほどと考えてください。
switch-case文
実行条件がある変数の値によって変わる場合はcase文で書くと良い場合があります。
int main(int argc, char* argv[]) { printf("あなたの目の前にトラがいます。\n"); printf("どうしますか? 1.戦う 2.逃げる 3.隠れる\n"); int ans = getc(stdin); switch(ans) { case '1': //1キーを押された場合 printf("あなたは戦いましたが、トラに食べられました。\n"); break; case '2': //2キーを押された場合 printf("あなたは逃げましたが、トラに食べられました。\n"); break; case '3': //3キーを押された場合 printf("あなたは、とっさに隠れてトラから逃げのびました。\n"); break; } getc(stdin);//Enterキーを読み飛ばす。 getc(stdin);//Enterキーが押されるまで待つ return 0; } |
break文を書かないと次のcase以降も実行してしまうことに注意してください。
switch-case文は、うまく使うときれいにかけますが、最新のC++の機能を使うともっと良い方法があります。
C++が使いこなせるようになってきて、case文が沢山出てくるプログラムを書いていたならば、更に今度はポリモーフィズムでより良く書けないか検討してみてください。