Когда я передаю значение и назначаю его другой переменной, кажется, что он никогда не складывается вместе. Это только выводит оба итога в файле, но не вместе. Кто-нибудь может указать на мою ошибку?
void financialReport(int price)
{
ofstream financial_log("financial.txt", ios::app);
int total = 0;
total += price;
int test = total++;
financial_log << "Total: " << test;financial_log.close();
}cout << "Destination: ";
cin >> destination;
cout << "Price agreed: ";
cin >> price;
financialReport(price);
Это вывод, который я получаю в моем текстовом файле:
Total4Total5
Кроме того, по какой-то причине между суммой и ценой нет места.
Это немного трудно понять твой вопрос, но я считать Одной из проблем может быть путаница в том, как работает оператор ++. variable_name ++ будет увеличивать переменную после ее вычисления в текущем операторе, а ++ variable_name будет увеличивать переменную до его оценка в текущем заявлении.
В вашем коде выше ++ не имеет никакого эффекта. Если вы хотите, чтобы у вашей переменной test было значение на единицу больше, чем total. Тогда вам нужно сделать это:
int test = ++total;
Однако, честно говоря, в вашем случае это даже не имеет смысла, так как total не используется нигде в функции после этого. Вы бы лучше просто делали:
int test = total + 1;
Попробуйте открыть отдельный и конкретный вопрос о проблемах форматирования в формате ios или in / out.
Выглядит так, как будто вы как-то пытаетесь вычислить итоговое значение по двум вызовам функций, используя локальную переменную, которая никогда не будет работать, потому что при каждом вызове функции total будет сбрасываться в 0.
Я был бы готов поспорить, что если вы сделаете так, как предлагает А. Юрченко, вы, вероятно, найдете свой собственный баг.
Если вы хотите хранить total
значение в файле, вы можете использовать это:
void financialReport(int price) {
ifstream financial_log_in("financial.txt");
int total = 0;
string dummy;
while (financial_log_in >> dummy && dummy != "Total:") {
}
if (dummy == "Total:") {
financial_log_in >> total;
}
ofstream financial_log_out("financial.txt");
total += price;
financial_log_out << "Total: " << total << endl;
financial_log_out.close();
}
Здесь мы читаем текущее значение из financial.txt
, обновите и напишите обратно.
Но в случае, если вы просто вызовете функцию несколько раз в течение одной среды выполнения, это будет более эффективным:
void financialReport(int price) {
static int total = 0;
ofstream financial_log("financial.txt");
total += price;
financial_log << "Total: " total << endl;
}
Сюда financialReport(5); financialReport(6);
приведет к Total: 11
, но при перезапуске программы total
будет 0
снова.
Пожалуйста, обратите внимание, что оба метода будут перезаписаны financial.txt
, Если вы не хотите этого поведения, добавьте ios::app
флаг конструктору ofstream
объекты.