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
相关产品推荐
相关产品推荐

