将用户数据写入文件

时间:2014-02-24 20:09:32

标签: c++ file-io

我正在尝试创建一个程序,询问销售额并显示总薪水并将该条目写入文件。但是我的程序只写了文件的最后一个条目。我在网上搜索了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;
   }

2 个答案:

答案 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一样。

每次循环都不需要打开文件,事实上你不应该这样做。 (虽然附加会有所帮助,如果你应该这样做的话。)