不知道哪里写错了求助c语言中定义一个含年、月、日的结构体,输入一个日期,计算该日期是该年的第多少天

#include<stdio.h>
struct date
{
int year;
int month;
int day;
}days;
main()
{
struct date days;
int d=0,i;
printf("输入年月日");
scanf("%d%d%d",&days.year,&days.month,&days.day);
if(days.month==1)
d+=days.day;
else for(i=1;i<days.month;i++)
{
switch(i)
{
case 1:case 3:case 5:case 7:case 8:case 10:d+=31;break;
case 4:case 6:case 9:case 11:d+=30;break;
}
if(i==2)
{
if(days.year%400==0 || days.year%100!=0 && days.year%4==0)
d+=29;
else
d+=28;
}
d+=days.day;
}

printf("%d",d);
}
不知哪里出问题了 算12月31号就会有600多天

#include<stdio.h>
struct date
{
int year;
int month;
int day;
};
int main()
{
struct date days; //结构体days存放年月日3部分整数
int d=0,i;
printf("输入年月日");
scanf("%d%d%d",&days.year,&days.month,&days.day);
if(days.month==1) //如果月份为1月,则天数d为日的数字
d+=days.day;
else
for(i=1;i<days.month;i++) //范围从1~月份数
{
switch(i)
{
//1,3,5,7,8,10,月份执行天数加31天, //注意:12月份没计算
case 1:case 3:case 5:case 7:case 8:case 10:case 12:d+=31;break;
//4,6,9,11为+30天
case 4:case 6:case 9:case 11:d+=30;break;
}
if(i==2) //2月份,闰年+29,平年+28
{
if(days.year%400==0||(days.year%100!=0 && days.year%4==0))
d+=29;
else
d+=28;
}

}
d+=days.day; //加上当月天数
printf("%d",d);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-22
每次循环都会把月份的天数加一次,是不对的,应该把
d+=days.day;
移到循环外面。
第2个回答  2015-01-22

第3个回答  2015-01-22
首先,switch里面没有case 12选项,其次,我觉得你那个b最好弄成全局变量,完了程序加个循环,这样可以一直输入,你现在是输入一次程序就退出了,完了再执行略麻烦
相似回答