C++性别校验if语句始终返回true的问题排查求助
问题分析与修复方案
嘿,我一眼就瞅出问题啦——你的if条件里用错逻辑运算符了!
咱们来拆解一下当前的条件:
if (gender != 'M' || gender != 'm' || gender != 'F' || gender != 'f' || gender != 'X' || gender != 'x')
这里用的是逻辑或(||),这意味着只要其中一个条件为true,整个表达式就会返回true。举个例子:
- 如果你输入的是'M',那么
gender != 'm'是true,整个条件就成立,直接输出error; - 哪怕输入的是'X',
gender != 'M'也是true,同样会触发错误提示。
这显然和你的需求完全相反,你想要的是当输入的字符不在允许的列表里时才报错,所以应该把所有的||换成逻辑与(&&),这样只有当所有条件都满足(也就是输入的字符既不是M/m,也不是F/f,也不是X/x)的时候,才会执行错误输出。
修复后的代码
cout << "Please enter the candidate's information (enter 'X' to exit)."; cout << endl << "gender: "; cin.get(gender); cin.ignore(1000,'\n'); // 把||全部替换成&& if (gender != 'M' && gender != 'm' && gender != 'F' && gender != 'f' && gender != 'X' && gender != 'x') { cout << "error"; }
另一种更简洁的写法
你也可以用std::string来简化判断,代码可读性会更高:
#include <string> // 需要包含这个头文件 // ... 前面的输入代码不变 if (std::string("MmFfXx").find(gender) == std::string::npos) { cout << "error"; }
这里find方法会返回字符在字符串中的位置,如果找不到(也就是输入不在允许的列表里),就会返回std::string::npos,这时候就输出错误信息。
内容的提问来源于stack exchange,提问作者ven
相关产品推荐
相关产品推荐

