You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言循环中使用scanf实现日期输入校验问题求助

解决方案

要实现强制用户输入纯数字组成的日期(三个数字),核心是循环校验输入合法性,直到用户输入符合要求为止。以下分两种常见场景给出具体实现:

场景1:分三次输入日、月、年(每个输入必须是数字)

如果是让用户分别输入日、月、年三个数字,可封装一个通用的数字输入函数,自动处理非数字输入的情况:

def get_valid_number(prompt):
    while True:
        input_content = input(prompt)
        try:
            # 尝试将输入转为整数,失败则触发异常
            return int(input_content)
        except ValueError:
            print("必须输入数字,请重新输入!")

# 获取日期的三个部分
day = get_valid_number("请输入日:")
month = get_valid_number("请输入月:")
year = get_valid_number("请输入年:")

print(f"你输入的日期:{year}年{month}月{day}日")

场景2:输入一个包含恰好三个数字的字符串(无字母或其他字符)

如果要求用户一次性输入三个数字(比如类似"105"代表1月5日),则需要检查输入长度和字符类型:

def get_three_digit_date():
    while True:
        input_str = input("请输入三个数字组成的日期:")
        # 校验:长度为3,且所有字符都是数字
        if len(input_str) == 3 and input_str.isdigit():
            return input_str
        print("输入无效,请输入恰好三个数字!")

date_code = get_three_digit_date()
print(f"你输入的日期编码:{date_code}")

原有代码失效的原因

通常原有代码会直接使用int(input())获取输入,没有异常捕获或校验逻辑。当用户输入字母时,Python会直接抛出ValueError并终止程序,无法实现“重新输入”的需求。上面的代码通过循环+异常捕获/字符串校验,确保只有合法输入才会跳出循环,解决了这个问题。

内容的提问来源于stack exchange,提问作者Diogo Lima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:05:22