for と while は最初に、do-while は最後に、繰り返しを続けるかどうかの条件を判定します。
場合によっては、繰り返しブロックの中で条件を判定し、 break文 や continue文 を呼び出す方が便利な場合があります。
break はそこで繰り返しを抜ける指示、continue はそれより下に書いた処理をせずに次の繰り返しの先頭に進む指示です。
(上記を踏まえて、今回のクイズです)
下は、生まれ月を指定すると誕生石を表示するプログラムです。
break か continue が下線の (a), (b) に入ります。
数字以外を指定するとプログラムを終了し、1〜12以外を指定すると再入力を求められます。
#include <stdio.h> main() { int month; char *stones[] = { "ガーネット", "アメジスト", "アクアマリン", "ダイアモンド" , "エメラルド", "パール", "ルビー", "ペリドット", "サファイア" , "オパール", "トパーズ", "ターコイズ" }; printf( "誕生石を調べるプログラムです(数字以外で終了)\n" ); while( 1 ) { printf( "生まれ月を指定してください:" ); if( scanf( "%d", &month ) != 1 ) { (a) ; } if( month < 1 || month > 12 ) { printf( "月が正しくありません\n" ); (b) ; } printf( "%d月の誕生石は%sです\n", month, stones[month-1] ); } }
(a), (b) それぞれには何が入りますか?
(答えは、次回のC言語の Tips で ・・・)
マクロを使った式 | 置換後 | 実行結果 | 期待していた値 |
ADD(4,2)/2 | 4 + 2/2 | 5 | 3 |
SUB(4,2)*5 | (4) - (2)*5 | -6 | 10 |
MUL(4-2,2) | (4-2 * 2) | 0 | 4 |
DIV(4-2,2) | ((4-2) / (2)) | 1 | 1 |