今日もCの勉強。
入力した日付の前日と翌日を表示。閏年を処理とか。
ifが多すぎ・・・。
#include <stdio.h>
void yesterday(int *y, int *m, int *d)
{
if(*m == 1){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){*y = *y-1, *m = 12; *d = 31; }
}
else if (*m == 2){
if(*d > 1 && *d <= 29){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 31; }
}
else if (*m == 3){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1)
{ if(*y % 4 == 0)
{ *m = 2; *d = 29; }
else {*m = 2; *d = 28; }
}}
else if (*m==4 || *m==6 || *m==8 || *m==9 || *m==11){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 31; }
}
else if (*m==5 || *m==7 || *m==10 || *m==12){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 30; }
}
}
void tomorrow(int *y, int *m, int *d)
{
if(*m == 1 || *m==3 || *m==5 || *m==7 || *m==8 || *m==10 ){
if(*d >= 1 && *d <31){ *d = *d + 1; }
}
else if (*m == 2){
if(*d >= 1 && *d <28){ *d = *d + 1; }
if(*y % 4 == 0){ *d = 29; }
else {*m = 3; *d = 1; }
}
else if(*d == 29){ *m = *m + 1; *d = 1; }
}
else if (*m==4 || *m==6 || *m==9 || *m==11){
if(*d >= 1 && *d <31){ *d = *d + 1; }
}
else if (*m==12){
if(*d >= 1 && *d <31){ *d = *d + 1; }
}
}
int main(void)
{
int na,nb,nc;
int nd,ne,nf;
puts("3つの整数を入力");
printf("西暦:"); scanf("%d", &na);
printf("月:"); scanf("%d", &nb);
printf("日:"); scanf("%d", &nc);
nd = na;
ne = nb;
nf = nc;
yesterday(&na, &nb, &nc);
printf("昨日は%d年%d月%d日です。\n", na, nb,nc );
tomorrow(&nd, &ne, &nf);
printf("明日は%d年%d月%d日です。\n", nd, ne, nf);
return(0);
}
3つの整数を入力
西暦:2000
月:1
日:1
昨日は1999年12月31日です。
明日は2000年1月2日です。
./10--2
3つの整数を入力
西暦:2000
月:2
日:29
昨日は2000年2月28日です。
明日は2000年3月1日です。
./10--2
3つの整数を入力
西暦:2000
月:3
日:1
昨日は2000年2月29日です。
明日は2000年3月2日です。
./10--2
3つの整数を入力
西暦:1999
月:3
日:1
昨日は1999年2月28日です。
明日は1999年3月2日です。
入力した日付の前日と翌日を表示。閏年を処理とか。
ifが多すぎ・・・。
#include <stdio.h>
void yesterday(int *y, int *m, int *d)
{
if(*m == 1){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){*y = *y-1, *m = 12; *d = 31; }
}
else if (*m == 2){
if(*d > 1 && *d <= 29){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 31; }
}
else if (*m == 3){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1)
{ if(*y % 4 == 0)
{ *m = 2; *d = 29; }
else {*m = 2; *d = 28; }
}}
else if (*m==4 || *m==6 || *m==8 || *m==9 || *m==11){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 31; }
}
else if (*m==5 || *m==7 || *m==10 || *m==12){
if(*d > 1 && *d <= 31){ *d = *d - 1; }
else if(*d == 1){ *m = *m - 1; *d = 30; }
}
}
void tomorrow(int *y, int *m, int *d)
{
if(*m == 1 || *m==3 || *m==5 || *m==7 || *m==8 || *m==10 ){
if(*d >= 1 && *d <31){ *d = *d + 1; }
}
else if (*m == 2){
if(*d >= 1 && *d <28){ *d = *d + 1; }
if(*y % 4 == 0){ *d = 29; }
else {*m = 3; *d = 1; }
}
else if(*d == 29){ *m = *m + 1; *d = 1; }
}
else if (*m==4 || *m==6 || *m==9 || *m==11){
if(*d >= 1 && *d <31){ *d = *d + 1; }
}
else if (*m==12){
if(*d >= 1 && *d <31){ *d = *d + 1; }
}
}
int main(void)
{
int na,nb,nc;
int nd,ne,nf;
puts("3つの整数を入力");
printf("西暦:"); scanf("%d", &na);
printf("月:"); scanf("%d", &nb);
printf("日:"); scanf("%d", &nc);
nd = na;
ne = nb;
nf = nc;
yesterday(&na, &nb, &nc);
printf("昨日は%d年%d月%d日です。\n", na, nb,nc );
tomorrow(&nd, &ne, &nf);
printf("明日は%d年%d月%d日です。\n", nd, ne, nf);
return(0);
}
3つの整数を入力
西暦:2000
月:1
日:1
昨日は1999年12月31日です。
明日は2000年1月2日です。
./10--2
3つの整数を入力
西暦:2000
月:2
日:29
昨日は2000年2月28日です。
明日は2000年3月1日です。
./10--2
3つの整数を入力
西暦:2000
月:3
日:1
昨日は2000年2月29日です。
明日は2000年3月2日です。
./10--2
3つの整数を入力
西暦:1999
月:3
日:1
昨日は1999年2月28日です。
明日は1999年3月2日です。