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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:54:02