从具有两列的文件中加载二维阵列
Load 2D array from a file with two columns
我正试图从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++;
}
}
最终,我需要取payroll.dat
中[0][0]
位置的值,然后乘以[0][1]
、[1][0]*[1][1]
、[2][0]*[2][1]
等,并将结果显示为总薪酬。
我想我对>>
运算符的理解是错误的。在这种情况下,这是流提取,按位提取,还是技术上两者都有?
我对正在发生的事情的理解是:只要count
小于numEmploy
,并且empData[][]
正在从payroll.dat
接收值,就将payroll.dat
中的第一个可用数据块插入empData[0][0]
,将第二个块(第一个块右侧的块)插入empData[0][1]
。然后循环返回并将下面的块(payroll.dat
的下一行、第一列)插入empData[1][0]
,然后将右边的块插入empData[1][1]
。继续此操作,直到count
大于或等于numEmploy
。则每个CCD_ 21将是类别CCD_ 22的对象。至少这是我想要的: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的成员函数中,那么您必须使用setters:
while ( count < numEmploy )
{
double tmppay, tmphours ;
inputFile >> tmppay >> tmphours ;
empdata[count].setPayRate( tmppay ) ;
empdata[count].setHoursWorked( tmphours) ;
count ++ ;
}
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 无法使用加载库卸载注入的 dll (C++)
- 加载到阵列中会导致堆栈粉碎,同时有足够的空间
- 从具有两列的文件中加载二维阵列
- 正在处理将三维阵列保存到文件并加载
- 在ARM NEON中的阵列边界上加载矢量