Как я могу написать C ++ fstream в файл?

У меня проблема с этим кодом. Не могли бы вы помочь мне выяснить, почему он не сохраняет новые общие суммы пожертвований (всего) в файл (donation_total.txt)? Следует отметить, что значение по умолчанию, сохраненное в файле, равно нулю, но оно сохраняет его для каждой итерации. Мне нужно, чтобы новое значение сохранялось в последней строке каждый раз.

Спасибо

#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;
}

0

Решение

В вашей программе много логических ошибок. Когда имя вводится без суммы пожертвования, оно принимает ранее пожертвованное значение.

#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;
}

Файлы программы

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]