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

C++工龄奖金档位计算时变量X打印多余字符问题排查

问题根因
  • 你代码中每个if分支内都执行了std::cout << X操作,只要工龄满足对应条件,就会把对应档位的X值打印出来,不会跳过前面满足的条件。比如输入4时,同时满足>=1和>=2两个条件,就会先后打印1和2,拼接成12;输入6时满足>=1、>=2、>=5三个条件,先后打印1、2、3,拼接成123,完全匹配你遇到的异常输出。
  • 每个分支内先给X赋值0再赋值档位值的逻辑是冗余的,没有实际作用。
修复方案

你需要的是最终只输出匹配的最高档位对应的值,两种常用实现方式如下:

方案1:调整判断逻辑,仅执行最高匹配分支

把独立的if改成从高到低判断的if-else if结构,确保只有最高匹配的分支被执行,且仅打印一次:

#include <iostream>
#include <string>

int main() {
    int salary, yearsOfService, X;
    std::string companyName;
    
    std::cin >> yearsOfService;
    
    if (yearsOfService >= 11) {
        X = 5;
        std::cout << X;
    } else if (yearsOfService >= 6) {
        X = 4;
        std::cout << X;
    } else if (yearsOfService >= 5) {
        X = 3;
        std::cout << X;
    } else if (yearsOfService >= 2) {
        X = 2;
        std::cout << X;
    } else if (yearsOfService >= 1) {
        X = 1;
        std::cout << X;
    }
    return 0;
}

方案2:先计算最终X值,统一打印

所有分支仅做X赋值,全部判断完成后再输出X,不需要修改原有if判断顺序:

#include <iostream>
#include <string>

int main() {
    int salary, yearsOfService, X = 0;
    std::string companyName;
    
    std::cin >> yearsOfService;
    
    if (yearsOfService >= 1){
        X = 1;
        if (yearsOfService>=2){
            X = 2;
        }
        if (yearsOfService>=5){
            X = 3;
        }
        if (yearsOfService>=6){
            X = 4;
        }
        if (yearsOfService>=11){
            X = 5;
        }
        std::cout << X; // 所有赋值完成后仅打印一次
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:06:03