#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;
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;
return 1;
int main()
int x;
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;
运行结果:
验证用户输入的日期格式是否正确,如果不正确,则提示重新输入,直到重新输入正确为止。(提示:需要定义一个表示日期的结构体类型struct Date,包括年、月、日信息,并用typedef重新定义新类型名Date;检查日期是否有效,定义为函数int checkDate(Date date))。#include <stdio.h>//定义一个表示日期的结构体类型struct Datestruct Date{ int year; int month; int day;}date;//
我们知道一年有12个月,每个月最多有31天,年有平年和闰年之分,本题目要求如果输入一个日期,程序需要判断用户输入的日期是否正确。
提示:测试输入的三个数字中,年份是正数,月份和日期有可能是负数,程序需要对这两个数为负数的情况进行判断。
多组测试用例,对每组测试用例:
用户输入是三个数字,分别表示年,月和日。 例如 2007 10 21 ,表示2007年10月21日,这个输入经过判断是正确的。又例如输入 1993 11 38 ,这个输入经过判断是错误的,因为日期不能超过31天。
程序的输
import java.util.Scanner;
public class WhileMonth {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int month;
boolean isRight;
System.out.println(“请输入月份(1-12月):”)...
public class Notebook {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输...
while((n=scanf("%d%d",&a,&b))!=2){
printf("error,scanf return %d\n",n);
while(getchar()!='\n');
printf("%d,%d",a,b);
这里有两层while循环,第一层用于检测scanf的返回值
(包括 m 和 n ) 的所有年分
具体要求:
输入,输出要有提示信息,并且要判断输入数据合法性,如果输入年份 m 和 n 不在合法范围内,则输出“输入错误!请重新输入。”用户重新输入数据,直到输入了合法的数据为止
要确保用户从键盘输入的数据符合要求,可用 do – while 语句实现。例如,要求输入一个正整数,如果输入错误,则需要重新输入。
1、首先从输入的字符中提取出年、月、日,判断是不是大于0的数字,并且在月和日中小于10的数字填充‘0’ 变成长度为2的字符;
2、将提取出的字符重组,使其组合成“YYYY-MM-DD”格式,并判断是否长度为10;
3、判断年份是否为闰年,确定2月的天数;
4、判断30,31天的月份的日是否正确;
5、月份不能大于12.
Java判断日期格式是否正确
Java中有一个能判断日期格式是否正确的方法SimpleDateFormat.setLenient(boolean lenient)。该方法的默认值为true,会将错误的日期格式(如:2021年2月29日)转化为正确的日期(2021年3月1日)。如果设置为false,则不会自动转化,而是抛出java.text.ParseException异常。可用于判断用户输入的日期是否正确。
https://blog.csdn.net/weixin_30531261/article/det
输入多组数据,请处理到文件结束。 用户输入是三个数字,分别表示年,月和日。 例如 2007 10 21 ,表示2007年10月21日,这个输入经过判断是正确的。又例如输入 1993 11 38 ,这个输入经过判断是错误的,因为日期不能超过31天。
对于每组数据输出结果。 程序的输出分为两种,1或者0。1表示输入正确,0表示输入错误。
while (1) { // 无限循环,条件为真
printf("请输入一个数字:");
scanf("%s", input); // 提示用户输入,并将输入存放到 input 数组中
num = atoi(input); // 将字符转换为整型数字
if (num == 0 && input[0] != '0') { // 判断转换后的数字是否为 0,如果是则说明输入的不是数字
printf("您输入的不是数字,请重新输入!\n");
continue; // 如果用户输入的不是数字,跳过本次循环,重新提示用户输入
printf("您输入的数字为:%d\n", num);
break; // 如果用户输入的是数字,跳出循环
return 0;
该代码中,使用 while(1) 语句实现了一个无限循环,程序会一直循环执行,直到满足某个条件(例如用户输入了数字)跳出循环。在循环体内,使用 scanf 函数获取用户输入,并使用 atoi 函数将输入的字符转换为整型数字。如果转换后的数字为 0,并且输入的字符不是字符 '0',则说明输入的不是数字,使用 continue 语句跳过本次循环,重新提示用户输入。如果转换后的数字不为 0,则说明用户输入的是数字,使用 break 语句跳出循环,程序结束执行。