当我传入一个值并将其分配给另一个变量时,它似乎永远不会将它们添加到一起。它只输出文件中的两个总计,但不能一起输出。谁能指出我的错误?
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
另外,由于某种原因,总价和价格之间没有空格。
答案 0 :(得分:0)
有点难以理解你的问题,但是我认为一个问题会让人误解为++运算符的工作方式。 variable_name ++将在当前语句中进行求值后递增变量,++ variable_name将在当前语句中评估之前递增变量。
在上面的代码中,++没有效果。如果您希望变量测试的值大于总计1。然后你需要这样做:
int test = ++total;
然而,老实说,在你的情况下,这甚至没有意义,因为此后函数中的任何地方都没有使用。你最好只做一下:
int test = total + 1;
尝试打开有关任何ios或输入/输出格式问题的单独且具体的问题。
看起来你似乎试图用两个函数调用来计算两个函数调用的总数,这个函数永远不会工作,因为总函数会在每个函数调用时重置为0。
我愿意打赌,如果你这样做,Yurchenko建议你可能会发现自己的错误。
答案 1 :(得分: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
个对象的构造函数中。