質問: switch文 defaultについて switch文で曜日を表示するプログラムを作成したいのですが、 任意の月の1日を日曜日とし、入力された日にち(変数date)の曜日を変数dayとしました。 day=(date-1)%7 とし、day=0のとき日曜日、day=1のとき月曜日、・・・、day=6のとき土曜日とします。 dateに0以下の数が入力されたとき、default文で「その月は1日から始まります。」 dateに32以上の数が入力されたとき、default文で「その月は31日までです。」 といったエラーを表示させたいと思います。 1つのswitch文の中に2種類のdefault文をどうやって書いたらいいのかわかりません。 switch文以下のプログラムは、以下のように書いてみました。 day=(date-1)%7; switch(day) { case 0: printf("1月%d日は日曜日です。",date); break; case 1: printf("1月%d日は月曜日です。",date); break; case 2: printf("1月%d日は火曜日です。",date); break; (case 3~case 5も同様に書く。) case 6: printf("1月%d日は土曜日です。",date); break; default: printf("1月は31日までです。"); /*dateに32以上の数が入力された場合のエラー表示*/ break; default: printf("1月は1日から始まります。"); /*dateに0以下の数が入力された場合のエラー表示*/ break; } しかし、1つのswitch文にdefault文は1つしか書けませんよね? 入力された日によってdefault文を使い分けるにはどうしたらよいのでしょうか。
回答: 手順として処理を行う前に値の正常値チェックを行うべきです。 day=(date-1)%7; この処理の前に値が異常であればエラーとし、正常な値以外では以降の処理が実行されない様にします。 異常かどうかの判断はif文で行います。 switch文のdefaultは異常値チェックのために使うべきではありません。