/***********************************************************
* 功能: 此程序只用于检查用户输入8位日期合法性 *
* 函数: int MyDateVerify() *
* 入口: char *date *
* 出口: Succees: return 0 *
* Faild : return -1 *
* 作者: LinXi *
* 日期: 2002-09-25 *
***********************************************************/
#include <stdio.h>
#include <string.h>
int MyDateVerify(char *date);
int main()
{
char inputDate[20];
int ret;
printf("\nPlease input the date:"
gets(inputDate);
ret=MyDateVerify(inputDate);
switch (ret)
{
case -1:
printf("[E]: date is faild\n"
return -1;
break;
case 0:
printf("Success\n"
break;
}
return 0;
}
int MyDateVerify(char *date)
{
int i=0;
int year=0;
int month=0;
int day=0;
if (strlen(date)!=
return -1;
for (i=0;i<8;i++)
{
if (date[i]<'0' || date[i]>'9')
return -1;
}
sscanf(date,"%4d%2d%2d",&year,&month,&day);
if (year<1000 || year>=3000)
return -1;
if (month<1 || month>12)
return -1;
if (day<1 || day>31)
return -1;
if (month==4 || month==6 || month==9 || month==11)
if (day>30)
return -1;
if (month==2)
if ((year%4==0 && year%100==0) || (year%400==0))
{if (day>29)
return -1;
}
else
{if (day>2
return -1;
}
printf("\ndate is: %s",date);
return 0;
}
sdccf 回复于:2002-09-26 13:10:09 |
谢谢! |
geekchi 回复于:2002-09-26 14:28:30 |
试了再说。 |
wkl 回复于:2002-09-26 21:45:17 |
正缺,3KS |
zxyunix 回复于:2002-09-27 11:11:43 |
/** 看我的 **/ /***********************************************************************/ /*函数名称:IsRunNian */ /*功能介绍:判断是否为润年 */ /*调用格式:int IsRunNian( i_year  */ /*参数说明:i_year 输入年份(yyyy) */ /*返回说明: 1 -- 是润年 */ /* -1 -- 不是润年 */ /***********************************************************************/ int IsRunNian(int i_year) { if( ((i_year%4==0)&&(i_year%100!=0)) || (i_year%400==0)  return 1; return -1; } /***********************************************************************/ /*函数名称:CheckDate */ /*功能介绍:检查输入日期的合法性 */ /*调用格式:int CheckDate(s_date) */ /*参数说明: s_date 输入日期(格式yyyymmdd) */ /*返回说明:0 -- 合法 */ /* 其它 -- 不合法 */ /***********************************************************************/ int CheckDate(s_date) char *s_date; { int i,y,m,d; intmouth_date[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int rc; if(strlen(s_date)< return -101; for(i=0;i<8;i++) if ( !isdigit(s_date[i])  return -102; i=sscanf(s_date,"%4d%2d%2d", &y, &m, &d); if(i!=3) return -103; if(y<0) return -104; if(m<1||m>12) return -105; rc=IsRunNian(y); if(m==2 && rc==1) { if(d>29 || d<1) return -106; } else if(d>mouth_date[m] || d<1) return -107; return 0; } |
zxyunix 回复于:2002-09-27 11:19:57 |
凌曦你的程序是错的,输20020229的时候看看) |
月冷西湖 回复于:2002-09-27 11:21:02 |
去试试。 |
凌曦 回复于:2002-09-28 12:46:12 |
我来试试,呵呵! |
凌曦 回复于:2002-09-28 12:52:56 |
我知道了,是判断润年的条件用错了,应把 if ((year%4==0 && year%100==0) || (year%400==0)) 改成 if ((year%4==0 && year%100!=0) || (year%400==0)) |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/