和预想的结果不一样……
#include"stdio.h"
int leap(int);
int num(int,int,int);
void main()
{
int y,m,d;
printf("请输入具体日期:\n");
scanf("%d,%d,%d",&y,&m,&d);
leap(y);
num(y,m,d);
printf("\n");
}
int leap(int year)
{
if(year%4==0&&year%100!=0||year%400==0)
{
printf("是润年!\n");
return 1;
}
else
{
printf("不是闰年!\n");
return 0;
}
}
int num(int y,int m,int d)
{
int num;
while((leap(y))==1)
{
switch(m)
{
case 1:num=d;break;
case 2:num=31+d;break;
case 3:num=31+29+d;break;
case 4:num=31+29+31+d;break;
case 5:num=31+29+31+30+d;break;
case 6:num=31+29+31+30+31+d;break;
case 7:num=31+29+31+30+31+30+d;break;
case 8:num=31+29+31+30+31+30+31+d;break;
case 9:num=31+29+31+30+31+30+31+31+d;break;
case 10:num=31+29+31+30+31+30+31+31+30+d;break;
case 11:num=31+29+31+30+31+30+31+31+30+31+d;break;
case 12:num=31+29+31+30+31+30+31+31+30+31+30+d;break;
default:printf("请输入正确的日期!\n");
}
printf("是这一年的第 %d 天",num);
break;
}
while((leap(y))==0)
{
switch(m)
{
case 1:num=d;break;
case 2:num=31+d;break;
case 3:num=31+28+d;break;
case 4:num=31+28+31+d;break;
case 5:num=31+28+31+30+d;break;
case 6:num=31+28+31+30+31+d;break;
case 7:num=31+28+31+30+31+30+d;break;
case 8:num=31+28+31+30+31+30+31+d;break;
case 9:num=31+28+31+30+31+30+31+31+d;break;
case 10:num=31+28+31+30+31+30+31+31+30+d;break;
case 11:num=31+28+31+30+31+30+31+31+30+31+d;break;
case 12:num=31+28+31+30+31+30+31+31+30+31+30+d;break;
default:printf("请输入正确的日期!\n");break;
}
printf("是这一年的第 %d 天!\n",num);
break;
}
return num;
}
不是润年的时候输出三个“不是闰年”。是闰年的时候是两个“是闰年”
[解决办法]
因为你的num函数里面调用了两次leap函数,每次调用都会输出
不过,不管是不是闰年,都是输出三次,你自己看仔细一点
printf("是这一年的第 %d 天",num);没有换行符,后面还是输出了“是润年!”
[解决办法]
仔细点
[解决办法]
单步调试吧
[解决办法]