gpt4 book ai didi

c++ - 从具有两列的文件加载二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 13:58:22 29 4
gpt4 key购买 nike

我正在尝试从 payroll.dat 输入此数据:

40.0     10.00
38.5 9.50
16.0 7.50
42.5 8.25
22.5 9.50
40.0 8.00
38.0 8.00
40.0 9.00
44.0 11.75

进入类 payroll 对象的二维数组。

这是我错误地尝试过的:

int count = 0;
const int numEmploy = 7; // Number of employees
const int col = 2; // Number of categories
Payroll empData[numEmploy][col]; // Array to hold objects
ifstream inputFile;

inputFile.open("payroll.dat");
if (!inputFile)
cout << "There was an error opening the file. Please make sure it exists." << endl;
else
{
while(count < numEmploy && inputFile >> empData[][])
{
inputFile >> empData[count][0] >> empData[count][1];
count++;
}
}

最终我需要在 [0][0] 位置获取 payroll.dat 中的值并乘以 [0][1],然后是 [1][0]*[1][1],然后是 [2][0]*[2][1],等等。并将结果显示为总工资。

我认为我对 >>> 运算符的理解是错误的。在这种情况下,这是流提取、按位还是技术上两者?

我对正在发生的事情的叙述的理解是:只要 count 小于 numEmploy AND empData[][] 正在接收来自 payroll.dat 的值,将 payroll.dat 中的第一个可用数据 block 插入 empData[0][0],插入第二个 block (第一个 block 右侧的 block )放入 empData[0][1]。然后循环并将以下 block (下一行,payroll.dat 的第一列)插入empData[1][0],然后将右侧的 block 插入empData[1][1]。继续此操作,直到 count 大于或等于 numEmploy。然后每个 empData[#][#] 将是类 Payroll 的一个对象。至少这就是我想要的 :P

这有可能吗?还是我一直在使用两个不同的阵列?

到目前为止,这是我的全部代码:

class Payroll
{
private:

double payRate; // holds an employee hourly pay rate

double hoursWorked; // an employee's hours worked

public:

Payroll() // empty constructor sets the payRate and hoursWorked to zero
{
payRate = hoursWorked = 0;
}

Payroll(double payR, double hoursW) //constructor checks for payR and hoursW to be positive
// and sets payRate and hours worked; sets to zero if negative values are provided
{
if (payR < 0) payR = 0;
if (hoursW < 0) hoursW = 0;
}

void setPayRate(double payR) //mutator for payRate; checks for payR to be positive or sets to zero
{
payRate = payR;
}

void setHoursWorked(double hoursW) //mutator for hoursWorked; checks for positive hoursW or sets to zero
{
hoursWorked = hoursW;
}

double getPayRate() //accessor to return payRate
{
return payRate;
}

double getHoursWorked() // accessor to return hoursWorked
{
return hoursWorked;
}

double getGrossPay() // computes and returns gross pay including OVERTIME, if any
{
float normHours, overHours, grossPay;

if (hoursWorked > 40)
{
overHours = (hoursWorked - 40);
normHours = (hoursWorked - overHours);
grossPay = (overHours * payRate * 1.5) + (normHours * payRate);
}

return grossPay;

}
};





int main ()
{
int count = 0;
const int numEmploy = 7; // Number of employees
const int col = 2; // Number of categories
Payroll empData[numEmploy][col]; // Array to hold objects
ifstream inputFile;

inputFile.open("payroll.dat");
if (!inputFile)
cout << "There was an error opening the file. Please make sure it exists." << endl;
else
{
while(count < numEmploy && inputFile >> empData[][])
{
inputFile >> empData[count][0] >> empData[count][1];
count++;
}
}

inputFile.close();

cout << fixed << showpoint << setprecision(2) << endl;

cout << "Employees' gross pay:" << endl;

for (int index = 0; index < numEmploy; index++)
{

empData[index][2].setPayRate();
empData[index][1].setHoursWorked();
cout << "Employee # " << index + 1 << empData.getGrossPay();

}


return 0;
}

最佳答案

我想你想要更像这样的东西,

Payroll empData[numEmploy] ;

...

while ( count < numEmploy )
{
inputFile >> empdata[count].payRate >> empdata[count].hoursWorked ;
count ++ ;
}

那么你的工资就是 empdata[x].payRate * empdata[x].hoursworked

如果读取循环不在 Payroll 的成员函数中,那么您必须使用 setter :

while ( count < numEmploy )
{
double tmppay, tmphours ;
inputFile >> tmppay >> tmphours ;
empdata[count].setPayRate( tmppay ) ;
empdata[count].setHoursWorked( tmphours) ;
count ++ ;
}

关于c++ - 从具有两列的文件加载二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20365934/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com