请帮我找下这个程序错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/06/29 03:05:07
题目是编写一个函数,输入年 月 日,返回是该日的第几天,再编写一个主函数,输入年 月 日,并调用函数计算并输出对应的该年的第几天。
#include<stdio.h>
int countday(int year,int month,int day)
{int month[12]={31,0,31,30,31,30,31,31,30,31,30,31};
int i,sum,day,year,month;
if (year%4!=0)
month[1]=29;
else if (year%100!=0)
month[1]=28;
else if (year%400!=0)
month[1]=29;
else
month[1]=28;
if(month==1) sum=day;
else if(month>1&&month<=12)
for (i=0;i<=(month-2);i++)
sum=sum+month[i];
sum=sum+day;
return(sum);}
void main()
{int i,year,month,day,sum;
for(i=0;i<5;i++)
{scanf("%d%d%d",year,month,day);
printf("%d",sum);}
}

兄弟,你的程序我看了,问题还不少啦:
1. scanf()函数中变量需要用取地址方式往里面写数据,你原来的程序运行报错就是这里造成的
2. countday函数根本没调用过,所以数据不会被计算。
3. countday函数里面局部变量和参数重名,而且数组名和局部变量名和参数名都是month
4. if (year%4!=0)
month[1]=29;
else if (year%100!=0)
month[1]=28;
else if (year%400!=0)
month[1]=29;
else 关于闰月的判断逻辑上有问题,即使有计算结果也是不正确
5. countday局部变量没有初始化,即sum=0;,输出结果会是随机数
6. 程序格式太乱,不方便调试,建议养成良好的编程风格
下面程序是改好的,仅供参考。
#include<stdio.h>
int countday(int year,int month,int day)
{
int imonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,sum=0;
if (year%4==0) imonth[1]=29;
if (year%100==0) imonth[1]=29;
if (year%400==0) imonth[1]=28;
for (i=0;i<=(month-2);i++)
sum=sum+imonth[i];
sum=sum+day;
return( sum);
}
void main()
{
int i,year,month,day,sum;
for(i=0;i<5;i++)
{
scanf("%d%d%d",&year,&month,&day);
if(year<0||month&l