1. 程式人生 > 其它 >【C語言程式練習】驗證使用者輸入的日期格式是否正確,如果不正確,則提示重新輸入,直到重新輸入正確為止

【C語言程式練習】驗證使用者輸入的日期格式是否正確,如果不正確,則提示重新輸入,直到重新輸入正確為止

技術標籤:C++學習筆記C語言c語言visual studio

驗證使用者輸入的日期格式是否正確,如果不正確,則提示重新輸入,直到重新輸入正確為止。

(提示:需要定義一個表示日期的結構體型別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;
}

執行結果:
在這裡插入圖片描述
在這裡插入圖片描述