验证用户输入的日期格式是否正确,如果不正确,则提示重新输入,直到重新输入正确为止。
(提示:需要定义一个表示日期的结构体类型struct Date,包括年、月、日信息,并用typedef重新定义新类型名Date;检查日期是否有效,定义为函数int checkDate(Date date))。
#include <stdio.h>
//定义一个表示日期的结构体类型struct Date
struct Date
{
int year;
int month;
int day;
}date;
//用typedef重新定义新类型名Date
typedef struct Date Date;
//检查日期是否有效函数
//int checkDate(Date date);
int checkDate(Date date)
{
int y = 0;
//判断月份是否为31天
if (date.month == 1 || date.month == 3 || date.month == 5 || date.month == 7 || date.month == 8 || date.month == 10 || date.month == 12)
y = 1;
//判断月份是否为30天
if (date.month == 4 || date.month == 6 || date.month == 9 || date.month == 11)
y = 4;
//月份为2月时(需要判断闰年)
if (date.month == 2)
{
if ((date.year % 4 == 0 && date.year % 100 != 0) || date.year % 400 == 0)
y = 2;
else
y = 3;
}
if (date.year < 1900 || date.year>2020)
return 0;
else if (date.month < 1 || date.month>12)
return 0;
else if (y == 1 && (date.day < 1 || date.day>31))
return 0;
else if ((y == 4) && (date.day < 1 || date.day>30))
return 0;
else if ((y == 2) && (date.day < 1 || date.day>29))
return 0;
else if ((y == 3) && (date.day < 1 || date.day>28))
return 0;
else
return 1;
}
int main()
{
int x;
do
{
printf("Please input the date!\n");
scanf_s("%d%d%d", &date.year, &date.month, &date.day);
x = checkDate(date);
} while (x == 0);
if (x)
printf("Correct!\n");
return 0;
}
运行结果: