Написание калькуляторной программы на C ++, которая запускает на один экземпляр больше, чем нужно - PullRequest
0 голосов
/ 17 сентября 2018

Таким образом, для проекта класса мне нужно создать программу калькулятора, которая получает данные из текстового файла formula.txt, который содержит следующие формулы:

'15;
10 + 3 + 0 + 25;'

Когда программа запускается, она должна рассчитать и распечатать результаты формул с разрывом строки следующим образом:

15 38

Однако каждый раз, когда я запускаюПрограмма дает следующий результат:
15 38 25

Я обработал свой код и не смог найти проблему.Любая помощь будет оценена.По коду вы найдете ниже.

#include <iostream>
using namespace std;

int main ()
{
  double input; //initialize input variable
  char sign; //intialize sign character
  double calc = 0; //initial calculation value set to 0
  bool add= true; // add to use whether to add or not
  bool cont = true; // boolean for continuing loop

  while (cont) //loop only continues while cont is true
  {

    cin >> input; //take in input

    if (add)  //if add is true
    {
      calc = calc + input; // adds the input to calc
    }

    else //if add is false
    {
      calc = calc - input; //subtracts input from calc
    }

    cin >> sign; //take in sign

    if (sign == '+') //if sign is '+'
    {
      add = true; //add is true
    }

    else if (sign == '-') //if sign is '-'
    {
      add = false; //add is false
    }

    else if (sign == ';') //if sign is ';'
    {
      cout << calc << endl; //outputs calc to console
      calc = 0;
    }

    if (cin.fail()) // if cin fails
    {
      cont = false; //continue is set to false
    }

  }
  return 0;
}

1 Ответ

0 голосов
/ 17 сентября 2018

Проблема возникла из вашей петли.Вы печатаете 38. Если (cin.fail ()) ложно, ваша предыдущая вставка cin ';'в знак, так что все в порядке.

Так один ход больше.add is true, поэтому calc это calc + input.ваш последний ввод 25, поэтому calc = 25.

cin >> знак не выполнен.Ваш последний знак был ';'поэтому вы печатаете calc в cout -> 25.

...