c语言的。。。自己写了个程序。。但是。。到底怎么回事啊?

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:49:26
这是我程序的一部分,我单独提出来的,可以运行。。

#include <stdio.h>
#include <stdlib.h>
check(int i,int j)
{int leap=0;
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{if(j>0&&j<=31)
leap=1;}
else if(i==4||i==6||i==9||i==11)
{if(j>0&&j<=30)
leap=1;}
else if(i==2)
{if(j>0&&j<=28)
leap=1;}
return leap;

}

void main()
{
int i,month,sum[3],day,error;
for(i=0;i<3;i++)
{
scanf("%d-%d",&month,&day);
error=check(month,day);
if(error==0)
{printf("这个日期有误啦!会算错的!:)请关闭了重新运行该程序吧!");
system("pause");
}
sum[i]=day;
}
for(i=0;i<3;i++)
printf("%d\n",sum[i]);
}

我程序是没什么问题,正常输入的话没有任何问题,但是我的子函数是一个检查输入错误的函数,但是这个函数怎么有问题呢?

如果我输入sss(回车),结果就会提示输入错误。。

如果我输入2-1(回车)sss(回车)它就显示1 1 1 了,不显示错误的提示了,怎么回事呢?

为什么第一个输入的东西它能检测错误,第二个输入的东西就不能检测

输入2-1后,month、day分别为2 1.
再输入sss时,因为不合法,scanf没有给month、day赋值,month day仍保留以前的值,即2,1

如果第一次就输入sss,那么month、day一开始就没有被赋值,里面存放的值是不确定的随机值。然后check时,有可能检查不合格,有可能检查合格。不过不合格的几率大一些,被你遇到了。

修改方法:判断scanf的返回值,如果不为2,表示输入的根本不是两个数。如果为2,再check

没看懂你上面写的什么?不过这样可能没有错误
#include <iostream.h>
#include <stdlib.h>
check(int i,int j)
{int leap=0;
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)

if(j>0&&j<=31)
{ leap=1;}
else
leap=0;

if(i==4||i==6||i==9||i==11)
if(j>0&&j<=30)
leap=1;
else
leap=0;

if(i==2)
if(j>0&&j<=28)
leap=1;
else
leap=0;
return leap;

}

void main()
{
int i,month,sum[3],day,error;

cin>>month;
cin>>day;
cout<<endl;
error=check(month,day);
if(error==0)
{
cout<<"这个日期有误啦!会算错的!:)请关闭了重新运行该程序吧!"<