C++中else if分支不生效 无论输入仅执行第一个if如何解决?
C++ else if分支永远触发第一个的问题解决
问题根本原因
你的代码永远走第一个if分支的核心问题出在逻辑判断的写法错误:
变量 == 值1 || 值2的写法不符合C++语法规则:非空字符串字面量"kvinna"、"nej"在布尔判断中会被直接判定为true,所以你写的kön=="Kvinna" || "kvinna"永远返回true,导致整个if条件永久成立,自然不会走后续的else if分支。- 其次
&&运算符优先级高于||,你没有加括号区分判断组,就算修正了第一个问题,逻辑也会出现不符合预期的情况。
正确的判断写法
如果要判断变量等于A或者等于B,必须显式写两次相等判断:变量 == A || 变量 == B,同时用括号把同一维度的判断括起来,避免优先级混乱。比如第一个if的正确写法是:
if( (kön=="Kvinna" || kön=="kvinna") && ålder<30 && (barn=="Nej" || barn=="nej") )
其余所有else if的判断逻辑都要按这个规则修正。
优化建议
你可以先统一把输入的字符串转为全小写,后续就不用每次判断两种大小写,代码会更简洁:
// 处理kön的大小写 for(auto &c : kön) c = tolower(c); // 处理barn的大小写 for(auto &c : barn) c = tolower(c);
处理完之后判断只需要写kön == "kvinna"、barn == "nej"即可。
修正后的完整代码
#include <iostream> #include <string> #include <cctype> using namespace std; int main () { setlocale(LC_ALL,""); // 变量定义 string kön; string barn; int stopp; int ålder; // 输入提示 cout << "Vad har du för kön? (Kvinna/Man)" << endl; cin>>kön; cout << "Hur gammal är du?" << endl; cin>>ålder; cout << "Har du barn?" << endl; cin>>barn; // 统一转小写,简化后续判断 for(auto &c : kön) c = tolower(c); for(auto &c : barn) c = tolower(c); if(kön=="kvinna" && ålder<30 && barn=="nej") { cout << "Du är kvalificerad för jobbet eftersom du är under 30 och har inte barn"; } else if (kön=="man" && ålder>30 && barn=="ja") { cout << "Du är inte kvalificerad eftersom du har barn och du är över 30"; } else if (kön=="kvinna" && ålder>30 && barn=="ja") { cout << "Du är inte kvalificerad eftersom du är kvinna, har barn och du är över 30"; } else if (kön=="man" && ålder<30 && barn=="nej") { cout << "Du är kvalificerad för jobbet eftersom du är man, under 30 och har inte barn"; } else if (kön=="kvinna" && ålder>30 && barn=="nej") { cout << "Du är inte kvalificerad eftersom du är kvinna och du är över 30"; } else if (kön=="man" && ålder<30 && barn=="ja") { cout << "Du är kvalificerad eftersom du är man och under 30"; } else if (kön == "man" && ålder>30 && barn == "nej") { cout << "Du är kvalificerad för jobbet eftersom du är man och du har inte barn"; } cin>>stopp; return 0; }
内容的提问来源于stack exchange,提问作者Ekkorojew
相关产品推荐
相关产品推荐

