Как добавить целые числа с помощью перенаправления ввода в C ++ - PullRequest
0 голосов
/ 09 февраля 2019

Я выполняю задание, в котором я создаю файл с именем Formula.txt, который содержит следующее:

100 + 50 - 25 + 0 + 123 - 1

Теперь я должен использоватьперенаправление ввода, поэтому файл читает целые числа и дает мне сумму для вышеуказанных целых чисел.

Я попытался включить строки, а также изменить тип целых чисел на char, чтобы позаботиться о знаках + и -.Я знаю, что cin принимает входные данные и пропускает пробелы, но моя сумма не является желаемой.

#include <iostream>
#include <string>
using namespace std;
int main()
{
  int sum = 0; //sets sum to 0
  char input=0;// sets input to 0
  while(cin>>input) // reads inputs
  {
      sum+=input; // adds inputs 
  }

  cout << sum << endl; // adds input
}

Я должен получить ответ 247 Вместо этого я получил 835

Ответы [ 2 ]

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

Хотя другой отвечает на ваш вопрос, вот один из подходов, использующих getline.Предполагается, что файл имеет только одну строку.

#include <fstream>
#include <sstream>
#include <string>

enum class Operation {
    ADD,
    SUBTRACT
};

int main() {
    std::ifstream fin {"<file to be opened>"};
    std::string str;

    std::getline(fin, str);
    std::istringstream sstr(str);

    std::string op;
    int ans = 0;
    Operation lastOperation = Operation::ADD;

    while (sstr >> op) {
        if (op == "+") {
            lastOperation = Operation::ADD;
        } else if (op == "-") {
            lastOperation = Operation::SUBTRACT;
        } else {
            int num = std::stoi(op);

            if (lastOperation == Operation::ADD) {
                ans += num;
            } else if (lastOperation == Operation::SUBTRACT) {
                ans -= num;
            }
        }
    }

    cout << ans << "\n";
}
0 голосов
/ 09 февраля 2019

Сначала вы используете >> для char с, что отбрасывает пробелы.

Значения ascii для символов 100+50-25+0+123-1:

49, 48, 48, 43, 53, 48, 45, 50, 53, 43, 48, 43, 49, 50, 51, 45, 49

Их сумма равна 815.Это объясняет ваш вывод.Вы должны читать цифры и операторы вместо отдельных символов.

Для чтения в файле вы можете использовать std::ifstream, например:

#include <fstream>
#include <string>

int main()
{
    std::ifstream ifs{"file name here"}; // NOTE: put your own file name here!!
    int sum;
    ifs >> sum;
    for (char c; ifs >> c;)
    {
        int num;
        ifs >> num;
        if (c == '+')
            sum += num;
        if (c == '-')
            sum -= num;
    }
    std::cout << sum << "\n";
}

Или вы также можете использовать синтаксис каналаваша система предоставляет то, что вы подразумеваете под «перенаправлением».

...