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

布尔表达式求值异常:密码验证逻辑代码问题排查求助

密码验证代码错误分析与修正

原代码存在的核心错误

  • 数字个数统计逻辑完全失效
    • 变量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;
}

修正说明

  1. 新增numberCount变量并初始化为0,专门用于统计密码中的数字个数
  2. 循环中遇到数字时执行numberCount++,正确累加数字数量,不再修改循环变量i
  3. 用numberCount <= 5替代错误的sizeof(number) < 6,准确判断数字个数条件
  4. 补充<cctype>头文件,保证isdigit函数正常编译
  5. 简化goodPassword的赋值逻辑,用直接赋值替代冗余的if-else分支

内容的提问来源于stack exchange,提问作者Eugene Irwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:37:15