我正在尝试创建一个程序,询问销售额并显示总薪水并将该条目写入文件。但是我的程序只写了文件的最后一个条目。我在网上搜索了2小时的解决方案,但找不到一个。
我希望所有输入都写入我的文件而不仅仅是最后一个
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
void SavingFile(); //Declartion
void Calculate();
char FileName[20];
double GrossPay;
double TotalSalary;
int employeeID=0;
char response;
int i=1;
int main()
{
SavingFile();
}
void SavingFile()
{
cout << "\nEnter the name of the file you want to create: ";
cin >> FileName;
do
{
employeeID++;
cout << endl << endl << "Enter sales amount for sales person ID " << employeeID <<" : $";
cin >> GrossPay;
Calculate();
cout <<"Sales amount for ID " << employeeID <<" : $" << TotalSalary <<endl;
cout <<endl <<endl;
do
{
ofstream Employee(FileName);
Employee <<"Employee ID: "<< employeeID <<" Sales Amount: $" << TotalSalary <<endl;
cout << endl;
i++;
}
while
(employeeID == i);
cout << "Do you want to process another employee ? (y/n): ";
cin >> response;
}
while ( (response == 'Y') || (response == 'y') );
}
void Calculate() // definition
{
TotalSalary = (GrossPay * .10) + 150;
//return TotalSalary;
}
答案 0 :(得分:0)
每次写入文件时都会覆盖文件。
如果要附加到该文件,除了ios_base::app
之外,还需要使用ios_base::out
标志打开该文件。
在您的代码中,您必须替换它:
ofstream Employee(FileName);
用这个:
ofstream Employee(FileName, ios_base::out | ios_base::app);
要了解更多信息,您可以在ofstream
类的构造函数上阅读this page。除此之外,您还可以找到可以使用的各种标志及其含义的描述。
答案 1 :(得分:0)
我不会为你重写代码,但我会解释你需要重写的逻辑。
在循环中,您读取一个值,然后调用Calculate
,它设置一个名为TotalSalary
的全局变量。 cout
可能看起来不错。尝试在输出文件的while循环中添加cout
,您将看到这些值不是以前的值。
问题在于,每次拨打Calculate
时,都会覆盖TotalSalary
。你没有在任何地方保存这些值,但是通过循环,你假设值仍在那里。
解决方案是在写入cout
的同时写入输出文件。打开ofstream
顶部的main
,然后输出到那里,就像输出到cout一样。
每次循环都不需要打开文件,事实上你不应该这样做。 (虽然附加会有所帮助,如果你应该这样做的话。)