我在学校做了一个功课,但我已经完成了,但结果并不完全是我想要的。
任务是使用以下规则从文本文件中获取总和:
第一列包含数字
第二个是0/1布尔值(分隔符是空格)
每当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(因为有一行带有错误的布尔值),而是代码打印160(因此它将所有行与真实布尔值相加)。
有什么想法吗?
答案 0 :(得分:3)
问题是在完全迭代文件之前不会输出,因此您会看到总和,而不是每个false
布尔值之后的总和。如果您在每次遇到布尔值false
时想要小计,则需要在循环中添加一些内容:
while (homework >> number >> boolean)
{
if (boolean)
{
sum += number;
}
else
{
cout << sum << endl;
sum = 0;
}
}
顺便说一下。如何声明你的布尔变量boolean
,你的代码甚至可以编译?我更改了我的示例中的检查(删除了== 1
)。
答案 1 :(得分:0)
您需要将行cout << sum << endl;
放在while循环中的else案例中,并重置总和。
这样的事情应该做:
while (!homework.eof())
{
homework >> number >> boolean;
if (boolean == 1)
{
sum += number;
}
else
{
cout << sum << endl;
sum = 0;
}
}
答案 2 :(得分:0)
你有很多选择,一个可能是:
第一个:将布尔变量定义为(bool变量)并将其与真假比较
示例:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string line;
bool boolean;
double number{ 0 };
double sum{ 0 };
ifstream homework;
homework.open("hw.txt");
while (!homework.eof())
{
homework >> number >> boolean;
if (boolean)
{
sum += number;
}
}
cout << sum << endl;
homework.close();
return 0;
}
当发现错误时停止,你可以使用休息
if (boolean)
{
sum += number;
}
else {
break;
}