C语言写闰年问题,帮忙看一下我写的哪里错了。先谢了!

来源:百度知道 编辑:UC知道 时间:2024/05/16 11:00:42
#include <stdio.h>
int main()
{struct date
{int year;
int month;
int day;
}cal;
printf("请按顺序输入年月日:\n");
scanf("%d%d%d",&cal.year,&cal.month,&cal.day);
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int j=0,i;
for(i=0;i<cal.month-1;i++)
j=j+a[i];
j+=cal.day;
while(cal.year%4==0&&cal.year%100!=0 ||cal.year%400==0&&cal.month>2)
j+=1;
printf("%d年%d月%d日是本年第%d天.\n",cal.year,cal.month,cal.day,j);
getchar();
getchar();
}
都说把while改成if但是如果是while他将怎么执行呢?
还有WXD11011第一个意见什么意思啊。
Roxxette第一个意见有道理嘛?

printf("请按顺序输入年月日:\n");
scanf("%d%d%d",&cal.year,&cal.month,&cal.day);

移到

int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int j=0,i;

之后


while(cal.year%4==0&&cal.year%100!=0 ||cal.year%400==0&&cal.month>2)

改为

if(cal.year%4==0&&cal.year%100!=0 ||cal.year%400==0&&cal.month>2)

********************************************

第一条是为程序的兼容性考虑的,有的编译器对变量的声明位置较敏感,要求必须写在开头(可执行语句之前),否则会出错。

第二条,while是个循环结构,并不是单纯的判断,而程序在此并不需要循环而是要判断,如果不更正,在输入一个闰年并且月分数值大于2时,由于while条件总是满足,所以程序将会陷入死循环,不会有结果输出

int main()
{struct date
{int year;
int month;
int day;
}cal;
printf("请按顺序输入年月日:\n");
scanf("%d%d%d",&cal.year,&cal.month,&cal.day);
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int j=0,i;
for(i=0;i<cal.month-1;i++)
j=j+a[i];
j+=cal.day;
if(cal.year%4==0&&cal.year%100