我在学校布置了作业,我已经完成了,但结果并不是我想要的。
任务是根据以下规则从文本文件中获取总和:
第一列包含数字
第二个是 0/1 bool 值(分隔符是空格)
只要 bool 在连续行中为真,程序就应该将数字相加
.txt 文件如下所示:
输入:
20 1
30 1
40 0
50 1
60 1
期望的输出:
50
110
代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string line;
double number;
double sum;
int boolean;
sum = 0;
ifstream homework;
homework.open("homework.txt");
while (!homework.eof())
{
homework >> number >> boolean;
if (boolean == 1)
{
sum += number;
}
}
cout << sum << endl;
homework.close();
system("pause");
return 0;
}
我希望代码打印出 50 和 110(因为有一行带有假 bool 值)但是代码打印出了 160(因此它总结了所有带有真 bool 值的行)。
有什么想法吗?
最佳答案
问题是在文件完全迭代之前您不会输出,因此您看到的是总和,而不是每个 false
bool 值之后的总和。如果每次遇到 bool 值 false
时都需要小计,则需要在循环中添加一些内容:
while (homework >> number >> boolean)
{
if (boolean)
{
sum += number;
}
else
{
cout << sum << endl;
sum = 0;
}
}
顺便说一句。您的 bool 变量 boolean
是如何声明的,您的代码是否可以编译?我更改了示例中的支票(删除了 == 1
)。
关于c++ - 我在从 .txt 文件中添加数字时遇到了一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547852/