简体   繁体   English

如何将C ++ fstream写入文件?

[英]How can I write C++ fstream to file?

I have a problem with this code. 我对此代码有疑问。 Could you please help me to find out why it does not save new total donation values (total) to the file (donation_total.txt)? 您能否帮助我找出为什么它不将新的捐赠总额(总计)保存到文件(donation_total.txt)中? It should be noted that the default value saved in the file is zero, but it keeps it for each iteration. 应该注意的是,文件中保存的默认值为零,但每次迭代都会保留默认值。 I need the new value is saved at the last line each time. 我需要每次将新值保存在最后一行。

Thanks 谢谢

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{

fstream records;
records.open("donation_total.txt", ios_base::in | ios_base::out | ios_base::app);
if (records.is_open())
{
    cout << "The record file is open!" << endl;
    string line;
    while (!records.eof())
    {
        getline(records, line);
    }
    int total = stoi(line);
    cout << "Total donation is: "<<total << endl;
    cout << "Is there any new record?" << endl;
    string str,newname;
    stringstream field;
    string name;
    int donation;
    getline(cin , str);
    while (str=="Yes" | str=="yes")
    {
        cout << "Enter name and donation value: ";
        getline(cin, newname);
        field.str(newname);
        field >> name >> donation;
        total += donation;
        field.clear();
        cout << name << " donates " << donation << "$" << endl;
        cout << "Total donation is: " << total << endl;
        records << endl << total;
        cout << "Is there any new record?" << endl;
        getline(cin, str);
    }
}
else
{
    cerr << "Could not find the file!" << endl;
}
records.close();
return 0;
}

Your program has many logical incorrectness. 您的程序有很多逻辑上的错误。 When a name is entered with no donation amount, it takes the previously donated value. 输入没有捐赠金额的名称时,它将采用先前捐赠的值。

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
int main()
{
    fstream records;
    records.open("donation_total.txt", ios_base::in | ios_base::out | ios_base::app);

    if (records.is_open())
    {
        cout << "The record file is open!" << endl;
        string line;

        while (getline(cin, line))
        {
            int total = stoi(line);
            cout << "Total donation is: "<<total << endl;
            cout << "Is there any new record?" << endl;
            string str,newname;
            stringstream field;
            string name;
            int donation;
            getline(cin , str);
            while (str=="Yes" || str=="yes")
            {
                cout << "Enter name and donation value: ";
                getline(cin, newname);
                field.str(newname);
                field >> name >> donation;
                total += donation;
                field.clear();
                cout << name << " donates " << donation << "$" << endl;
                cout << "Total donation is: " << total << endl;
                records << endl << total;
                cout << "Is there any new record? ";
                getline(cin, str);
            }
            break;
        }

    }
    else
    {
        cerr << "Could not find the file!" << endl;
    }
    records.close();

return 0;
}

文件程序

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM