C语言 日期计算加一天 源代码
答案:4 信息版本:手机版
解决时间 2019-10-06 05:17
已解决
2019-10-05 10:24
#include void main ()
{
float a,b,c;
scanf ("%fa %fb %fc",&a,&b,&c);
if (a!=(int)a||b!=(int)b||c!=(int)c||b<1||b>12||c<1||c>31)
printf("error input");
else
{
if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12 &&c<31 ) c++ ;
else if (b==12&&c==31)
{
c=1;
b=1;
a++;
printf("%d %d %d",a,b,c);
}
else if (b==1||b==3||b==5||b==7||b==8||b==10 && c==31 )
{
c=1;
b++;
a=a;
printf("%d %d %d",a,b,c);
}
else if (b==4||b==6||b==9||b==11 &&c<30 ) c++ ;
else if ( b==4||b==6||b==9||b==11 &&c==30)
{
c=1;
b++;
a=a;
printf("%d %d %d",a,b,c);
}
else if (b==2)
{if (((int)a%4==0&&(int)a%100!=0)||((int)a%400==0) &&(c<=28) ) c++;
else if (c==29)
{
c=1;
b++;
a=a;
printf("%d %d %d",a,b,c);
}
else if (c>29||c<1) printf("error input");
else
{
if (c<=27) c++;
else if (c==28)
{c=1; b++; a=a; printf("%d %d %d",a,b,c);}
else printf("error input");
}
}
}
}
运行后事没有错误的,但是我输入1 1 1 竟然输出的也是 error input"); ,然后我把第一个条件里德||b<1||b>12||c<1||c>31,才没有不会error input,可明明是 符合要求的么,去掉后,我再输入1 1 1,依然是没有输出1 1 2 ,什么都没有输出了 什么情况!!!!!急
环境是windows visual c ++6.0
最佳答案
2019-10-05 11:58
#include
#include
main ()
{
int a,b,c;
scanf ("%d,%d,%d",&a,&b,&c);
printf("%4d%4d%4d\n",a,b,c);
if (b<1||b>12||c<1||c>31)
printf("error input\n");
else
{
if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12)
{
if(b==12&&c==31) {c=1;b=1;a++;}
else if(b!=12&&c==31) {b++;c=1;}
else if(c<31) c++;
else printf("error inpu\n");
}
else if ((b==1||b==3||b==5||b==7||b==8||b==10))
{
if(c==30) {b++;c=1;}
else if(c<31) c++;
else printf("error input\n");
}
else if (b==2)
{if (((int)a%4==0&&(int)a%100!=0)||(int)a%400==0) //判断的是闰年
{
if(c<=28) c++;
else if(c==29)
{c=1;b++;}
else {printf("error input\n");exit;}
}
else {
if(c==28) {b++;c=1;}
else if(c<28) c++;
else {printf("error input\n");exit;}
}
}
}
printf("%4d%4d%4d",a,b,c);
system("pause");
}
结构太乱,重新整理了一下
全部回答
1楼
2019-10-05 14:48
#include
int isprim(int n)
{
int i;
if(n<2)
return 0;
for(i=2;i*i
{
if(n%i==0)
return 0;
}
return 1;
}
int main(void)
{
int a, b;
int i, c=0;
printf("输入第一个人的生日:");
scanf("%d", &a);
printf("输入第二个人的生日:");
scanf("%d", &b);
for(i=a+1;i
{
if(isprim(i))
c++;
}
if(isprim(c))
printf("缘分绝佳!\n");
else
printf("缘分一般。\n");
return 0;
}大体意思是这样,日期的合法性判断比较繁琐,不在这里详说了。
2楼
2019-10-05 14:20
scanf ("%fa %fb %fc",&a,&b,&c);貌似"%fa %fb %fc"有点问题
最好定义abc为int类型,sacnf("%d %d %d",&a,&b,&c);
还有就是你的没输出,你可以把
if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12 &&c<31 ) c++ ;
改为
if (b==1||b==3||b==5||b==7||b==8||b==10|| b==12 &&c<31 )
{
c++ ;
printf("%d %d %d",a,b,c);
}
就行了,没按你说的功能来做,只是实现你的那个例子
3楼
2019-10-05 13:29
#include
void main ()
{
// float a,b,c;
int a, b, c;
// scanf ("%fa %fb %fc",&a,&b,&c);
scanf("%4d%2d%2d", &a, &b, &c);
do
{
if (a!=(int)a||b!=(int)b||c!=(int)c||b<1||b>12||c<1||c>31)
printf("error input");
else
{
if ((b==1||b==3||b==5||b==7||b==8||b==10|| b==12) && c<31)
c++ ;
else if (b==12&&c==31)
{
c=1;
b=1;
a++;
printf("%04d-%02d-%02d", a, b, c);
break;
}
else if ((b==1||b==3||b==5||b==7||b==8||b==10) && c==31 )
{
c=1;
b++;
// a=a;
printf("%04d-%02d-%02d", a, b, c);
break;
}
else if ((b==4||b==6||b==9||b==11) && c==30)
{
c=1;
b++;
// a=a;
printf("%04d-%02d-%02d", a, b, c);
break;
}
else if ((b==4||b==6||b==9||b==11) && c<30 )
c++ ;
else if (b==2)
{
if (((int)a%4==0 && (int)a%100!=0) || ((int)a%400==0) && (c<=28) )
c++;
else if (c==29)
{
c=1;
b++;
a=a;
printf("%d %d %d",a,b,c);
}
else if (c>29||c<1)
printf("error input");
else
{
if (c<=27)
c++;
else if(c==28)
{
c=1; b++; a=a;
printf("%d %d %d",a,b,c);
}
else printf("error input");
}
}
}
} while (0);
printf("%04d-%02d-%02d", a, b, c);
}
另:后面2月份的考虑的还不够充分,你再检查看看。
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯