从数组和函数向两个文件发送输出

Sending OutPut to two files from an array and a function

本文关键字:两个 文件 输出 数组 函数      更新时间:2023-10-16

我哪里做错了?当我发送这个时,我得到的是完全空白的文件?我需要重新工作数组还是函数实际上没有发送任何东西到文件?这是家庭作业,所以有帮助的建议会很好。我很困惑,所以非常需要帮助。

Main- #include<iostream>
#include<fstream>
#include<string>
#include "Payroll.h"
using namespace std;

const int NUM_EMPLOYEE = 75;
int main()
{
    int dependents;
    double payrate;
    string name;
    double hours;
    ifstream fin;
    int count = 0;
    Payroll employeeArray[NUM_EMPLOYEE];
    ofstream fout;
    fin.open("employeeData.txt");
    if (!fin)
    {
        cout << "Error opening data filen";
        return 0;
    }
    else
    {
        while(fin >> payrate >> dependents)
        {
            getline(fin, name);
            employeeArray[count].setWage(payrate);
            employeeArray[count].setDependents(dependents);
            employeeArray[count].setName(name);
            cout << "How many hours has" << name << " worked? ";
                cin >> hours;
                employeeArray[count].setHours(hours);
            count++;
        }
    }
    fout.open("payrollDetails.txt");
    fout << " Name              Hours  Regular  Overtime  Gross    Taxes    Net" << endl;  // heading for file
    fout.close();
    fout.open("checkInfo.txt");
    fout << "Net Pay    Name";   // heading for file two
    fout.close();
    for (int i = 0; i < count; i++)
    {
        employeeArray[i].printPayDetails(fout << endl);
    }
    return 0;
}
——

打印功能

void Payroll::printPayDetails(ostream& out)
{
    double normPay = getNormPay();
    double overTime = getOverPay();
    double grossPay = getGrossPay();
    double taxAmount = getTaxRate();
    double netPay = computePay();
    const int SIZE = 9;
    ofstream fout;
    fout.open("payrollDetails.txt");
    out << setw(19) << left << name << fixed << setprecision(2) << right << setw(5) << hours  << setw(SIZE)  << normPay << setw(SIZE) << overTime ;
    out << setw(SIZE) << grossPay << setw(SIZE) << taxAmount <<setw(SIZE) << netPay;
    fout.close();
    fout.open("checkInfo.txt");
    out << netPay << "        " << name;
    fout.close();
}

我看到的唯一问题是您没有清除流中的前导换行符:

while (fin >> payrate >> dependents)
{
    getline(fin, name);

在while循环中执行提取后,在流中留下一个换行符。std::getline()将在看到换行符时停止输入,因此您必须通过调用ignore():

来消除它。
fin.ignore();
getline(fin, name);

由于ignore()返回对流的引用,您甚至可以在形参中使用它:

getline(fin.ignore(), name);

但是更习惯的是使用std::ws,一个放弃所有前导空格的操纵符:

getline(fin >> ws, name);

您还需要将它放在if语句中以检查它是否成功:

while (fin >> payrate >> dependents && getline(fin >> ws, name))
{
    // ...