如何用scanf指定d-m-y日期格式并验证短横线分隔符
C语言日期格式d-m-y校验方案
你可以直接利用scanf格式串的匹配特性实现分隔符校验,不需要调整函数入参,修改逻辑如下:
- 把
scanf的格式串从"%d%d%d"调整为"%d-%d-%d",格式串里的普通字符-会强制要求输入流中两个整数之间必须是短横线,否则匹配失败 - 校验
scanf的返回值:scanf会返回成功匹配的参数个数,只有返回值等于3的时候,才说明输入完全符合d-m-y的格式要求
修改后的完整代码如下:
int date_read(int *d, int *m, int *y){ // 匹配失败时直接返回0表示读取/格式校验不通过 if (scanf("%d-%d-%d", d, m, y) != 3) { return 0; } // 若有需要可以在此处追加日期合法性校验,比如月份范围1-12、日期对应月份的合法范围等 return 1; }
这个方案完全不需要调整现有函数的入参,调用方可以通过返回值判断输入是否符合格式要求:返回1代表读取成功格式合法,返回0代表格式错误或输入不完整。
内容的提问来源于stack exchange,提问作者IllyaKara
相关产品推荐
相关产品推荐

