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;
}
展开
 我来答
神话杜十三
2016-04-14 · TA获得超过207个赞
知道小有建树答主
回答量:217
采纳率:86%
帮助的人:163万
展开全部
你好!
闰年条件应该是:
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?

而且代码尽量不要都写在一行。不容易分辨。(否则不会犯这个错误)

请多指教。

以上
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式