アプリ版:「スタンプのみでお礼する」機能のリリースについて

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文を使い分けるにはどうしたらよいのでしょうか。

A 回答 (5件)

手順として処理を行う前に値の正常値チェックを行うべきです。



day=(date-1)%7;

この処理の前に値が異常であればエラーとし、正常な値以外では以降の処理が実行されない様にします。
異常かどうかの判断はif文で行います。

switch文のdefaultは異常値チェックのために使うべきではありません。
    • good
    • 0
この回答へのお礼

よくわかりました。
ありがとうございました。

お礼日時:2012/04/28 12:21

default内で処理するのなら以下の様にしますが、今回の場合はswitchの手前で判断しないとdefaultに該当する条件がありません。

 例えば(32-1)%7=4となってしまいます。
default:
 if (date >= 32)
  printf("1月は31日までです。"); /*dateに32以上の数が入力された場合のエラー表示*/
 else
  printf("1月は1日から始まります。"); /*dateに0以下の数が入力された場合のエラー表示*/
 break;
    • good
    • 0
この回答へのお礼

手前で判断すればいいのですね。
ありがとうございました。

お礼日時:2012/04/28 12:19

書かれている switch(day){ ~ } ですと


defaultは、何をどうやっても「dayが 0~6以外の整数の場合」の意味にしかならないんですが・・・

dateがマイナスの場合はともかくプラスの場合はdayは0~6の値になるのでdefaultにはどうやっても行きません。
なのでswitch (day) の前で調べるしかないです。
    • good
    • 0
この回答へのお礼

よくわかりました。
ありがとうございました。

お礼日時:2012/04/28 12:22

「dateがマイナスの場合はともかくプラスの場合は」



「dateが0以下の場合はともかく1以上の場合は」
ですね・・・
    • good
    • 0
この回答へのお礼

はい、わかりました。ありがとうございます。

お礼日時:2012/04/28 12:25

>1つのswitch文にdefault文は1つしか書けませんよね?


1個も書けません、default文などありません、defaultラベル付き文はありますが。
文法書を勉強しなおしましょう。
    • good
    • 0
この回答へのお礼

はい、すみません。
勉強し直します。

お礼日時:2012/04/28 12:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!