【问题标题】:Reading multiple lines in a .txt file and outputting an answer for each line读取 .txt 文件中的多行并为每一行输出答案
【发布时间】:2019-07-09 01:16:24
【问题描述】:

我编写了一个程序,它接受来自.txt 文件的输入并输出总和。我已经正确地得到了一行数字的总和。我需要文件中所有行的输出。

对此的要求是在.txt 文件中包含一个分号以指示行尾。

#include <iostream>
#include <string>
#include<fstream>
using namespace std;

int main()
{
    std::ifstream ifs{"formula.txt"};
    int sum = 0;
    ifs >> sum;
    //int input = 0;
    {
        for (char a; ifs >> a;)
        {
            int num;
            ifs >> num;
            if(a == '+')
            {
                sum += num;
            }

            if(a == '-')
            {
                sum -= num; 
            }

            if( a== ';')
            {
                sum += num;
                sum -= num;
            } 
        }
        cout << sum << endl;
    }
}

【问题讨论】:

  • .txt 文件包含 15 ; 10 + 3 + 0 + 25 ; 5 + 6 - 7 - 8 + 9 + 10 - 11;输出应该是 15 38 4 我得到了 247。
  • 请将您的评论移到编辑它的问题中,并更正代码中的缩进
  • sum+= num; sum-= num; 的目标是什么?
  • 添加数字
  • 但是你先加 num 然后再减去 num。

标签: c++ linux ubuntu


【解决方案1】:

cout &lt;&lt; sum &lt;&lt; endl; 行放在之后 for,所以你只在末尾写一个 值而不是每次的值';'是到达

if( a== ';') 
{
  sum+= num;
  sum-= num;
} 

sum 保持不变,除非发生溢出

一定是这样的

if( a== ';') 
{
   cout << sum << endl;
   sum = 0;
}

因为';'标记公式的结束。

您的循环无法管理像10 + 3 + 0 + 25 这样的表单,因为for 的每一轮您总是管理一个运算符,然后是一个数字

输入是15;10 ... 并且无法管理,你读取15并将其保存在sum中,然后你读取';'并分配 a ,然后您读取 10 并分配 num 以使 10 丢失等


提案:

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
  ifstream ifs("formula.txt");

  if (!ifs.is_open()) {
    cout << "cannot open formula.txt" << endl;
    return -1;
  }

  int val;

  while (ifs >> val)
  {
    char op;

    while (ifs >> op)
    {
      if (op == ';')
      {
        cout << val << endl;
        break;
      }

      int num;

      if (! (ifs >> num)) {
        cout << "unexpected EOF" << endl;
        return -1;
      }

      if (op == '+')
      {
        val += num;
      }
      else if (op == '-')
      {
        val -= num; 
      }
      else {
        cout <<"invalid operator '" << op << '\'' << endl;
        return -1;
      }
    }
  }

  return 0;
}

编译和执行

pi@raspberrypi:/tmp $ g++ -pedantic -Wextra s.cc
pi@raspberrypi:/tmp $ cat formula.txt 
15;10+3+0+25;5+6-7-8+9+10-11; 
pi@raspberrypi:/tmp $ ./a.out
15
38
4
pi@raspberrypi:/tmp $ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多