C语言求教 输入一个日期(格式:YYYY/MM/DD),要求输出这个日期对应星期几 有些年分无结果?
有些年份行,有些不行,小弟大神指教啊源程序#include<stdio.h>#include<stdlib.h>intmain(){floatw,c,y,m,d,vari...
有些年份行,有些不行,小弟大神指教啊
源程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
float w,c,y,m,d,variable_c,variable_y,leap,a;
printf("请输入一个日期,条件(输入的日期需要大于等于1582.10.15)\n\n格式(如2016/1/1):\n\n ");
printf("please input year/month/day\n\n");
scanf("%f/%f/%f",&variable_y,&m,&d);
if(variable_y<=0)
{
printf("error");exit(0);
}
if(m<=0||m>=13)
{
printf("error");exit(0);
}
//printf("day:");
//scanf("%f",&d);
if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)
{
printf("error");exit(0);
}
if((m==4||m==6||m==9||m==11)&&d>30)
{
printf("error");exit(0);
}
if(d<=0)
{
printf("error");exit(0);
}
if((int)variable_y%4==0)
{
if((int)variable_y%100==0)
{
if((int)variable_y%400==0)
{
leap=1;
}
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap)
{
if(m==2&&d>29)
printf("erroe");exit(0);
}
else
if(m==2&&d>28)
{
printf("error");exit(0);
}
variable_c=(int)variable_y/100;
c=variable_c;
y=variable_y-100*variable_c;
if(m==1)
{
m=13;
y=y-1;
}
if(m==2)
{
m=14;
y=y-1;
}
a=13*(m+1)/5;
w=((int)c/4)-2*c+y+((int)y/4)+(int)a+d-1;
w=(int)w%7;
if(w<0)
{
w=7+w;
}
switch((int)w)
{ 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;
}
return 0;
} 展开
源程序
#include<stdio.h>
#include<stdlib.h>
int main()
{
float w,c,y,m,d,variable_c,variable_y,leap,a;
printf("请输入一个日期,条件(输入的日期需要大于等于1582.10.15)\n\n格式(如2016/1/1):\n\n ");
printf("please input year/month/day\n\n");
scanf("%f/%f/%f",&variable_y,&m,&d);
if(variable_y<=0)
{
printf("error");exit(0);
}
if(m<=0||m>=13)
{
printf("error");exit(0);
}
//printf("day:");
//scanf("%f",&d);
if((m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&d>31)
{
printf("error");exit(0);
}
if((m==4||m==6||m==9||m==11)&&d>30)
{
printf("error");exit(0);
}
if(d<=0)
{
printf("error");exit(0);
}
if((int)variable_y%4==0)
{
if((int)variable_y%100==0)
{
if((int)variable_y%400==0)
{
leap=1;
}
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap)
{
if(m==2&&d>29)
printf("erroe");exit(0);
}
else
if(m==2&&d>28)
{
printf("error");exit(0);
}
variable_c=(int)variable_y/100;
c=variable_c;
y=variable_y-100*variable_c;
if(m==1)
{
m=13;
y=y-1;
}
if(m==2)
{
m=14;
y=y-1;
}
a=13*(m+1)/5;
w=((int)c/4)-2*c+y+((int)y/4)+(int)a+d-1;
w=(int)w%7;
if(w<0)
{
w=7+w;
}
switch((int)w)
{ 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;
}
return 0;
} 展开
1个回答
展开全部
你好!
闰年条件应该是:
1、能整除4且不能整除100 2、能整除400
你的代码
if((int)variable_y%4==0)
{
if((int)variable_y%100==0)
{
if((int)variable_y%400==0)
{
leap=1;
}
else
leap=0;
}
else
leap=1;
}
else
leap=0;
你的sourcecode明显条件不对。
应该是
if(((y%4 == 0)&&(y%100 != 0)) || (y%400 == 0))
leap = 1;
else
leap = 0;
以上,
闰年条件应该是:
1、能整除4且不能整除100 2、能整除400
你的代码
if((int)variable_y%4==0)
{
if((int)variable_y%100==0)
{
if((int)variable_y%400==0)
{
leap=1;
}
else
leap=0;
}
else
leap=1;
}
else
leap=0;
你的sourcecode明显条件不对。
应该是
if(((y%4 == 0)&&(y%100 != 0)) || (y%400 == 0))
leap = 1;
else
leap = 0;
以上,
更多追问追答
追问
条件没问题,换了你的结果还是一样;不行。谢谢。
追答
Sorry,
我的问题。
我给你调试了下,发现这里 少了 {} 每次闰年都执行exit(0)
if(leap)
{
if(m==2&&d>29)
printf("erroe");exit(0); 28)
{
printf("error");exit(0);
}
加上{}后, 调试没问题, 能正常执行(不晓得你的代码对不对?)。
不过你的代码是不是有点问题,年月日你为什么用 float?
而且代码尽量不要都写在一行。不容易分辨。(否则不会犯这个错误)
请多指教。
以上
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询