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

ツェラーの公式を使い、年、月、日にちから曜日を表示するプログラムを作りました。
#include<stdio.h>
main()
{
int y,m,d,x,z;

printf("年、月、日にちの順に入力してください→");
scanf("%d%d%d",&y,&m,&d);


if(m<2){
m=m+12;
y=y-1;
}

x=y+y/4-y/100+y/400+(13*m+8)/5+d;

z=x%7;

switch(z){
case 0:
printf("日曜日\n");
break;
case 1:
printf("月曜日\n");
break;
case 2:
printf("火曜日\n");
break;
case 3:
printf("水曜日\n");
break;
case 4:
printf("木曜日\n");
break;
case 5:
printf("金曜日\n");
break;
case 6:
printf("土曜日\n");
break;
}
}

これを基本に、1582年10月5日以前の入力があったとき「エラー」と表示するにはどうすればいいですか?
解答お願いします。

A 回答 (2件)

単純に考えるなら


if(y < 1582 ||
(m <= 1582 && m < 10) ||
(m <= 1582 && m <= 10 && d <= 5)
)
{
printf("エラー\n");
goto _END;
}

switch(z){
.
.
.
}

_END:
}

でよいのでは?
後続の処理がたくさんあってgotoを使いたくないなら、ネストが深くなるけど追加したif文のelseで既存の処理を書くとか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
思っていたように動きました。

お礼日時:2009/04/21 01:49

>これを基本に、1582年10月5日以前の入力があったとき「エラー」と表示するにはどうすればいいですか?



 以前「だけ」のチェックでしたら、

 if( ( y * 10000 + m * 100 + d ) <= 15821005 ){

   printf( "エラー\n" );

   return( 255 );
 }
 これでよろしいのでは・・。
    • good
    • 1

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