我在从.txt文件中添加数字时遇到了一些问题

时间:2017-08-07 13:14:59

标签: c++ fstream

我在学校做了一个功课,但我已经完成了,但结果并不完全是我想要的。

任务是使用以下规则从文本文件中获取总和:

  • 第一列包含数字

  • 第二个是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(因此它将所有行与真实布尔值相加)。

有什么想法吗?

3 个答案:

答案 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;
    }