如何使用Bool变量?修正判断3字符编码后两位为数字的C++代码
修正后的C++代码及问题解析
原代码存在的问题
- 索引错误:C++字符串采用0起始索引,第二个字符是
userCode[1],第三个是userCode[2],原代码使用userCode[2]和userCode[3]会导致越界访问(输入3字符时userCode[3]不存在)。 - 无效赋值:
userCode = isValid;试图将布尔值赋值给字符串变量,属于类型不匹配的错误操作,完全多余。 - 逻辑错误:原代码用两个独立的
if判断,只要其中一个字符是数字就设isValid = true,不符合“第二个和第三个字符均为数字”的需求。 - 变量重定义:
else块中重新定义了局部变量bool isValid = false;,这会屏蔽外部的isValid变量,导致外部变量未被正确赋值。 - 未初始化变量:
bool isValid;未初始化,直接使用会触发未定义行为。 - 未校验输入长度:没有检查输入的字符串是否为3个字符,若输入长度不足3,访问索引会导致越界。
修正后的代码
#include <iostream> #include <string> #include <cctype> // 用于isdigit函数 using namespace std; int main() { string userCode; bool isValid = false; // 初始化变量 getline(cin, userCode); // 先检查输入长度是否为3,再判断第二个和第三个字符是否为数字 if (userCode.length() == 3 && isdigit(userCode[1]) && isdigit(userCode[2])) { isValid = true; } if (isValid) { cout << "Valid passcode" << endl; } else { cout << "Invalid passcode" << endl; } return 0; }
关键修正说明
- 初始化
isValid为false,避免未定义行为。 - 新增输入长度校验
userCode.length() == 3,确保后续索引访问安全。 - 使用正确的索引
userCode[1](第二个字符)和userCode[2](第三个字符)。 - 用逻辑与
&&合并条件,保证两个字符同时为数字时才设isValid = true。 - 删除所有无效的
userCode = isValid;赋值操作。 - 移除了
else块中的局部变量重定义,直接通过条件判断赋值。
内容的提问来源于stack exchange,提问作者Elizr
相关产品推荐
相关产品推荐

