c
1#include <stdio.h> 2#include <math.h> 3int calc_a(int year,int month,int day){ //何日経ったか 4 int monthdays[]={0,31,59,90,120,151,181,212,243,273,304,334}; 5 int eachmonth2[]={31,28,31,30,31,30,31,31,30,31,30,31}; 6 if(fx(year)==0 && (month==1 || month==2) && day<eachmonth2[month-1]){ //閏年かつ1月か2月かつ2/29じゃなかった場合 7 int days = (year-1)*365+(((year-1)/4)-((year-1)/100)+((year-1)/400))+(monthdays[month-1])+day-1; 8 }else if(fx(year)==0 && month==2 && day==29){ //閏年かつ2/29だった場合 9 int days = (year-1)*365+(((year-1)/4)-((year-1)/100)+((year-1)/400))+(monthdays[month-1])+day-1; 10 }else if (fx(year)==0 && month>3){ //閏年かつ3月以降だった場合 11 int days = (year-1)*365+(((year-1)/4)-((year-1)/100)+((year-1)/400))+(monthdays[month-1])+day; 12 }else{ //閏年じゃなかった場合 13 int days = (year-1)*365+(((year-1)/4)-((year-1)/100)+((year-1)/400))+(monthdays[month-1])+day-1; 14 } 15 return days; 16} 17int fx(int a){ //閏年判定 18 if(a%4==0 && a%100!=0){ 19 return 0; 20 }else if (a%400==0){ 21 return 0; 22 }else{ 23 return 1; 24 } 25} 26 27int main(void){ 28 int year,month,day,days,z,nowyaer,nowmonth,nowday,nowdays; 29 int eachmonth[]={31,28,31,30,31,30,31,31,30,31,30,31}; 30 int lyeachmonth[]={31,29,31,30,31,30,31,31,30,31,30,31}; 31 printf("記念日の西暦を入力してください"); 32 scanf("%d",&year); 33 printf("記念日月を入力してください"); 34 scanf("%d",&month); 35 if(month>12){ //12より大きい数字が打たれた時にエラーを出す 36 printf("正しい月を入力してください"); 37 break; 38 } 39 printf("記念日日付を入力してください"); 40 scanf("%d",&day); 41 if(fx(year)==0 && day>lyeachmonth[month-1]){ //ありもしない日を打たれた時にエラーを出す 42 printf("正しい日付を入力してください"); 43 }else if(day>eachmonth[month-1]){ 44 printf("正しい日付を入力してください"); 45 } 46 days=0; 47 days=calc_a(year,month,day); 48 printf("%d年%d月%d日は西暦1年1月1日から%d日経っています\n",year,month,day,days); 49 return 0; 50}
閏年を考えに入れて場合分けをしました。このようにした場合最初の関数で閏年判別の関数を使いたかったのですがそこでエラーが出てしまいました。どこを直せばいいかわからずとりあえずいろいろ手を出したのですが解決には至らず。。。
3つほどエラーが出ました。breakの場所がループの中に入っていないと言われましたが{}の中に入っているのにどこが間違ってるのかもわかりません。
よろしければ回答の程をお願いします。以下エラーコード
ex3.c:6:8: error: implicit declaration of function 'fx' is invalid in C99 [-Werror,-Wimplicit-function-declaration] if(fx(year)==0 && (month==1 || month==2) && day<eachmonth2[month-1]){ //閏年かつ1月か2月かつ2/29じゃなかった場合 ^ ex3.c:15:12: error: use of undeclared identifier 'days'; did you mean 'day'? return days; ^~~~ day ex3.c:3:35: note: 'day' declared here int calc_a(int year,int month,int day){ //何日経ったか ^ ex3.c:37:9: error: 'break' statement not in loop or switch statement break; ^ 3 errors generated.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/14 00:30
2021/05/14 01:18