user3504849
user3504849

Reputation: 1

Post fix calculator, returns wrong value

I'm Writing a program to implement postfix calculator, its giving me completely wrong answers. Really appreciate the help

class stacks {
public:
  typedef int List;
  static const int size = 100;

  stacks() {
    use = 0;
  }

  void push(List entry) {
    data[use] = entry;
    ++use;
  }
  List pop() {
    if(!empty()) {
      --use;
      return data[use];
    }
  }

  bool empty() const {
    return use == 0;
  }
  int Size() const {
    return use;
  }

private:
  List data[size];
  int use;

};

int main() {

  stacks s;
  string input;

  int final;

  ifstream infile("foo.txt",ios::in);

  while (getline(infile, input))
    cout << "Expression: ";
  for (int i = 0; i<input.length(); i++) {

    cout << input[i];
    auto oper1 = s.pop();
    auto oper2 = s.pop();

    if(input[i] == '1' || input[i] == '2' || input[i] == '3' || input[i] == '4' ||     nput[i] == '5' || input[i] == '6' || input[i] == '7' || input[i] == '8' || input[i] == '9')
      s.push(input[i] - '0');

    if(input[i] == '+')
      s.push(oper1 + oper2);
    if(input[i] == '-')
      s.push(oper1 - oper2);
    if(input[i] == '*')
      s.push(oper1 * oper2);
    if(input[i] == '/')
      s.push(oper1 / oper2);

  }
  final = s.pop();
  cout << endl << "Value = " << final << "." << endl << endl;

}

What do you recommend? Thanks

Upvotes: 0

Views: 157

Answers (1)

Fred Larson
Fred Larson

Reputation: 62073

You need to wait to pop() until you know you have an operator. You're popping stuff off the stack when you shouldn't be.

Upvotes: 1

Related Questions