布尔表达式求值异常:密码验证逻辑代码问题排查求助
密码验证代码错误分析与修正
原代码存在的核心错误
- 数字个数统计逻辑完全失效
- 变量
number未初始化,初始值为随机垃圾值,无法正确统计数字数量 - 循环中遇到数字时执行
i=number,这不仅没有统计数字,还破坏了循环变量i的正常遍历逻辑,导致字符串遍历混乱
- 变量
- 数字个数判断条件完全错误
- 使用
sizeof(number)是获取int类型的字节数(通常为4),和密码中的数字个数毫无关系,应该用数字计数器的数值来判断
- 使用
- 缺少必要头文件
isdigit函数定义在<cctype>头文件中,原代码未包含可能导致编译警告或错误
修正后的代码
#include <iostream> #include <cctype> using namespace std; int main() { string codeWord; bool goodPassword; int numberCount = 0; // 初始化数字计数器为0,变量名更清晰 cin >> codeWord; for (unsigned int i = 0; i < codeWord.size(); ++i) { if (isdigit(codeWord[i])) { numberCount++; // 遇到数字就累加计数器 } } // 正确判断两个条件:数字个数不超过5,且密码长度小于10 goodPassword = (numberCount <= 5 && codeWord.size() < 10); cout << (goodPassword ? "Valid" : "Invalid") << endl; return 0; }
修正说明
- 新增
numberCount变量并初始化为0,专门用于统计密码中的数字个数 - 循环中遇到数字时执行
numberCount++,正确累加数字数量,不再修改循环变量i - 用
numberCount <= 5替代错误的sizeof(number) < 6,准确判断数字个数条件 - 补充
<cctype>头文件,保证isdigit函数正常编译 - 简化
goodPassword的赋值逻辑,用直接赋值替代冗余的if-else分支
内容的提问来源于stack exchange,提问作者Eugene Irwin
相关产品推荐
相关产品推荐

