一:函数未声明。
二:判断是否闰年中,r100!==0 是错误的,应该是!=;其它的语法与结果我没测试,希望你再测试一下。
三:变量类型应为int型,不是char型,另外输入x变量时未加&。经改正,测试正常。
四:未测试,也未详读。其实这么写很麻烦,直接year%4==0&&year%100!=0||year%400==0判断,更加简洁。下面把我作的一个小程序献上,供您参考,它也很不完善,算法也不算是最简洁的,但我想你参考一下还是很有好处的。
程序代码:/*
经WIN-TC测试,正常运行。
*/
#include
char hello[5][300]={{"*************************************************************\n"},
{"您好,欢迎您来玩这个小游戏。您可以输入年、月、日或者年份、天数\n"
"或者年份,系统为您判定它是一年中的第几天或者那年的几月几日或者\n"
"判定它是闰年还是平年。请不要输入数字以外的字符,那样会造成不必\n"
"要的麻烦。谢谢!\n"},
{" 请输入年、月、日:\n"},
{"请输入年份及天数:\n"},
{"请输入年份:\n"} };
static int yue[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{ 0,31,29,31,30,31,30,31,31,30,31,30,31}} ;
int pr(int n)
{
int c;
c= n%4==0&&n%100!=0|| n%400==0;
return c;
}
int panduan_1(int y,int r,int i)
{
int j,n=0;
for(j=0;j
n+=yue[i][j];
n+=r;
return n;
}
void panduan_2(int n,int r,int i)
{
int j=1,m=1;
while(r>yue[i][j])
{
r-= yue[i][j];
j++;
m++;
}
printf("这是%d年,%d月,%d日\n",n,m,r);
}
void caidan()
{
printf("%s\n\n",hello[0]);
printf("请您作出选择:\n");
printf("1. 输入年、月、日,求它是那年中的哪一天。\n"
"2. 输入年份及天数,求它是那年中的哪月哪日。\n"
"3. 输入年份,求它是平年或者是闰年。\n"
"4. 退出。\n");
printf("请输入选择:\n");
}
int main(void)
{
int n,y,r,i,j;
printf("%s%s\n",hello[0],hello[1]);
do
{
caidan();
scanf("\n%d",&j);
puts(" ");
while(j<1||j>4)
{
printf("您输入的字符非法,请重新选择:\n");
caidan();
scanf("%d",&j);
}
}
while(j<0||j>5);
while(j!=4)
{
switch(j)
{
case 1:printf("请输入年、月、日,空格格开,enter结束输入:\n");
scanf("\n %d %d %d",&n,&y,&r);
puts(" ");
i=pr(n);
j=panduan_1(y,r,i);
printf("它是%d年的第%d天\n",n,j);
break;
case 2:printf("请输入年、天数,空格格开,enter结束输入:\n");
scanf("%d %d",&n,&r);
puts(" ");
i=pr(n);
panduan_2(n,r,i);
break;
case 3:printf("请输入待测试的年份:\n");
scanf("%d",&n);
i=pr(n);
if(i==0)
{
printf("它是平年。\n");
break;
}
if(i==1)
{
printf("它是闰年。\n");
break;
}
}
caidan();
scanf("%d",&j);
}
if(j==4)printf("谢谢您!再见!");
getchar();
}