C++使用结构体数组计算10名员工总应发工资问题求助
问题原因
- 变量重名导致薪资未存入求和数组:你在打印单员工薪资的for循环中定义了局部变量
gross,和开头声明的gross[10]全局数组重名,计算得到的单员工应发工资仅存在局部变量中,全局gross数组全程是未初始化的随机值,求和必然出错。 - 累加逻辑错误:求和循环中的
totalGrossPay = sum + gross[i]语句里,sum始终保持初始值0.0,每次循环都会覆盖totalGrossPay的旧值,最终只能保留最后一个元素的计算结果,无法得到总和。
修正方案
推荐直接复用结构体自带的grossPay字段存储单员工薪资,无需额外开辟数组,也能避免变量重名问题,修正后完整代码如下:
#include <iostream> #include <iomanip> using namespace std; int main() { double totalGrossPay = 0.0; // 初始化累加变量 struct GrossPay { int empID; string empName; double chargeHour; int workingHours; double grossPay; }; GrossPay employee[10]; for (int i = 0; i < 10; i++) { cout << (i + 1) << "." << "Employee Name :"; cin >> employee[i].empName; cout << "Employee ID :"; cin >> employee[i].empID; cout << "Employee`s charge rate per hour :"; cin >> employee[i].chargeHour; cout << "Working hours :"; cin >> employee[i].workingHours; // 直接计算并存入结构体字段 employee[i].grossPay = employee[i].chargeHour * employee[i].workingHours; cout << endl; } cout << "Employee ID\t" << "Employee Name\t" << "Gross Pay(RM)" << endl; for (int i = 0; i < 10; i++) { cout << employee[i].empID << "\t\t" << employee[i].empName << "\t\t" << employee[i].grossPay; cout << endl; } cout << endl; for (int i = 0; i < 10; i++) { totalGrossPay += employee[i].grossPay; // 累加所有员工薪资 } cout << "Total gross pay of 10 employees : RM" << totalGrossPay; return 0; }
内容的提问来源于stack exchange,提问作者Anis Amira
相关产品推荐
相关产品推荐

