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

C++薪资计算程序输出重复打印、exit code -1报错排查

问题根因与修复方案

1. 链接错误collect2.exe: error: ld returned 1 exit status

该错误和代码逻辑无关,是文件锁导致的:之前运行的程序控制台窗口未正常关闭,对应exe文件被系统占用,编译器无法写入新的编译产物,实际运行的始终是旧版本的错误代码。
修复方法:关闭所有已打开的该程序控制台窗口,或在任务管理器中结束对应进程,再重新编译即可。

2. 输出重复打印、奖金计算错误

代码存在三处问题:

  • 区间判断语法错误:C++不支持a >= b < c形式的连续比较,该写法会先将a >= b的判断结果转为布尔值(true为1、false为0),再和c比较大小,判断逻辑完全失效。旧版本代码使用多个独立if而非else if结构时,会同时命中多个分支导致重复打印。
  • 奖金比例错误:15000-49999.99美元区间要求7%涨幅,原代码中写为0.7(即70%),计算结果偏差10倍。
  • 冗余代码问题:每个分支重复编写总薪资计算、结果打印逻辑,容易引发重复执行、漏写等问题。

修复后完整代码

// Salary Calculator Program
// Intro C++, Lesson 6
// Written by Phong Dau, Jun 2022
#include <iostream>
using namespace std;

int main( )
{
    // 声明变量
    double oldSalary = 0.00;
    double bonus = 0.00;
    double total = 0.00;
    
    // 接收用户输入
    cout << "Enter your old salary: ";
    cin >> oldSalary;

    // 按规则计算奖金
    if (oldSalary < 15000.00)
    {
        bonus = oldSalary * 0.05;
    }
    else if (oldSalary >= 15000.00 && oldSalary < 50000.00)
    {
        bonus = oldSalary * 0.07;
    }
    else if (oldSalary >= 50000.00 && oldSalary < 100000.00)
    {
        bonus = oldSalary * 0.1;
    }
    else 
    {
        bonus = oldSalary * 0.15;
    }
  
    // 统一计算总薪资并打印结果,无需在每个分支重复编写
    total = bonus + oldSalary;
    cout << "You will receive a raise of $" << bonus << ", for a new yearly salary of $" << total << endl;
  
    system("pause");
    return 0;
}

验证说明

修复后各测试场景均符合预期:

  • 输入10000:输出5%涨幅对应奖金500,总薪资10500,仅打印1次
  • 输入20000:输出7%涨幅对应奖金1400,总薪资21400,仅打印1次
  • 输入80000:输出10%涨幅对应奖金8000,总薪资88000,仅打印1次
  • 输入150000:输出15%涨幅对应奖金22500,总薪资172500,仅打印1次

内容的提问来源于stack exchange,提问作者D A A U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:27:21