C的合法检验性怎么搞吖??

来源:百度知道 编辑:UC知道 时间:2024/06/21 01:20:36
#include "stdio.h"
#define N 3 /*学生人数*/

struct date
{int iYear,iMonth,iDay;
}; /*定义日期结构体类型*/

struct person
{char chNo[15];
char chName[15];
struct date stEnrol;
int iScore;
}; /*定义学生信息结构体类型*/

void fnDataInput(struct person stStud[]); /*输入函数*/
void fnDataOutput(struct person stStud[]); /*输出函数*/

void fnDataInput(struct person stStud[])
{
int i;
printf("No. Name Year Month Day Score\n");
for(i=0;i<N;i++)
scanf("%s%s%d%d%d%d",stStud[i].chNo,stStud[i].chName,&stStud[i].stEnrol.iYear,
&stStud[i].stEnrol.iMonth,&stStud[i].stEnrol.iDay,&stStud[i].iScore);
}

void fnDataOutput(struct person stStud[])
{
int i;
printf("No. Name Year Month Day\n");
for(i=0;i<N;i++)
printf("%s %s %d %d %d %d\n",stStud[i].chNo,stStud[i].chName,st

把fnDataInput的for循环更改一下
for(i=0;i<N;i++)
{
bool wrong=true;
while(wrong)
{
scanf("%s%s%d%d%d%d",stStud[i].chNo,stStud[i].chName,&stStud[i].stEnrol.iYear,
&stStud[i].stEnrol.iMonth,&stStud[i].stEnrol.iDay,&stStud[i].iScore);

if(check(stStud[i].stEnrol.iYear,stStud[i].stEnrol.iMonth,stStud[i].stEnrol.iDay))wrong=false;
else
printf("年月日不合要求");
}

然后你自己再写个check函数
bool check(int year,int month,int day)
{
if(year<1989||year>2007) return false;
if(month>12||month<1) return false;
if(day<1) return false;
switch(month)
{
case 1,3,5,7,8,10,12: if(day>31) return false;break;
case 2:
if(((year % 4 ==0 && year % 100 !=0) || year % 400 ==0)&&day>29) return false;
else
if(day>28) return false;break;
default: