C++实现输入关联输出的车辆准入校验程序编写问题
驾驶证核验程序实现方案
现有代码问题梳理
- 条件分支逻辑互斥:
else if(age>=18)分支会拦截所有18岁及以上的输入,后续age>=20、1-17岁的分支永远无法触发 - 数据类型选择错误:驾驶证号为18位长字符序列,用
int类型存储会出现数值溢出,无法正确存储真实证号 - 未做无输入/非法输入兼容:直接调用
cin>>读取内容时,若用户直接回车不输入、输入非约定格式内容,程序会出现卡滞、乱输出问题 - 语法错误:
switch语句未配置任何case分支,仅保留default块,无论年龄值为多少都会触发该块的输出 - 业务逻辑矛盾:18岁以上分支仅判断输入值是否为1,未做准入权限判断,20岁以上的准入逻辑永远无法执行
核心实现逻辑
要实现「有输入时输出对应关联内容、无输入时输出对应提示」的效果,必须在每次读取输入前先判断输入流状态,读取失败时直接走无输入分支,不要等待有效输入阻塞程序:
- 读取年龄时,若检测到无输入/输入非数字,直接输出「未检测到有效年龄输入,核验不通过」
- 年龄核验通过后,读取驾驶证号时,若检测到无输入,直接输出「未检测到驾驶证号输入,核验不通过」
- 所有合法输入对应匹配核验规则,输出对应的准入/拒绝提示
修正后可运行代码
#include <iostream> #include <string> #include <limits> using namespace std; int main() { int age; string licenseNum; // 预置合法驾驶证号示例,实际场景可对接数据库查询 const string validLicense = "110101199001011234"; cout << "请输入年龄:" << endl; // 先判断年龄输入是否有效 if (!(cin >> age)) { // 清空输入错误标记,清空缓冲区残留内容 cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "未检测到有效年龄输入,禁止进入车辆" << endl; return 0; } // 年龄核验逻辑,按优先级判断无互斥 if (age < 18) { cout << "不满18周岁不符合驾驶证申领要求,禁止进入车辆" << endl; return 0; } cout << "请输入驾驶证号:" << endl; // 读取前先忽略缓冲区残留的换行符,避免误判为空输入 cin.ignore(numeric_limits<streamsize>::max(), '\n'); if (!getline(cin, licenseNum) || licenseNum.empty()) { cout << "未检测到驾驶证号输入,禁止进入车辆" << endl; return 0; } // 驾驶证号核验 if (licenseNum == validLicense) { cout << "驾驶证核验通过,允许进入车辆" << endl; } else { cout << "驾驶证号核验不通过,禁止进入车辆" << endl; } cout << "以上规则根据交管部门相关规定制定" << endl; return 0; }
代码说明
- 所有输入环节都做了空输入、非法输入拦截,不会出现程序卡滞问题
- 修正了原有的分支互斥问题,年龄判断从低到高匹配,不会出现逻辑遗漏
- 驾驶证号改用字符串存储,适配真实证号格式,后续可直接扩展对接证号数据库
- 每个输入场景都对应明确的输出提示,无输入、非法输入、核验通过、核验不通过都有对应反馈
内容的提问来源于stack exchange,提问作者Muhammad Arslan Nazir
相关产品推荐
相关产品推荐

