Чтение нескольких строк в текстовом файле и вывод ответа для каждой строки - PullRequest
0 голосов
/ 15 февраля 2019

Я написал программу, которая принимает входные данные из файла .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;
    }
}

1 Ответ

0 голосов
/ 15 февраля 2019

строка cout << sum << endl; ставится после для , поэтому вы пишете только одно значение в конце, а не значение каждый раз ';'может достигать

In

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

сумма в неизмененном, за исключением случаев переполнения

должно быть что-то вроде

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

потому что ';'отмечает конец формулы.

Ваш цикл не может управлять такой формой, как 10 + 3 + 0 + 25, потому что каждый ход для вы всегда управляете оператором, а затем

.ввод 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 $ 
...