Вычисление постфиксного выражения в языке c++
По какой-то причине эта программа запускается, но компилятор завершает работу и отправляет меня на отладку и завершение.
Есть идеи, почему? Я застрял, как Чак.
Я прокомментировал в коде, что он должен делать. Я могу отказаться от всего этого и просто попробовать что-то другое, и поверьте мне, я собираюсь ха-ха-ха, но я действительно хочу знать, почему компилятор выблевывает его обратно
#include<iostream> #include<conio.h> #include<ctype.h> using namespace std; /* The program will evaluate a postfix expression that contains digits and operators. The program tries to simulate the microprocessor execution stack or evaluation of expression. */ //The class performing the evaluation class Evaluation { public: int st[50]; int top; char str[50]; Evaluation() { top = -1; } //function to push the item void push(int item) { top++; st[top] = item; } //function to pop an item int pop() { int item = st[top]; top--; return item; } //function to perform the operation depending on the operator. int operation(int a,int b,char opr) { switch(opr) { case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; default: return 0; } } int calculatePostfix(); }; //This is the function that calculates the result of postfix expression. int Evaluation::calculatePostfix() { int index = 0; while(str[index]!='#') { if(isdigit(str[index])) { push(str[index]-'0'); } else { int x = pop(); int y = pop(); int result = operation(x,y,str[index]); push(result); } index++; } return pop(); } /* main function that reads the postfix expression and that prints the result. The input expression should be ending with a number An example input expression would be: 123*+ Its output will be 7. */ int main() { void clrscr(); Evaluation eval; cout << "Enter the postfix: "; cin >> eval.str; int result = eval.calculatePostfix(); cout << "the result is " << result; getch(); }
Sergey Alexandrovich Kryukov
"...компилятор завершает работу и отправляет меня на отладку и завершение работы..." Я не могу в это поверить. Может быть, это ваш код завершается, а не компилятор? Затем запустите его под отладчиком.
—СА
lotussilva
Я не знаю, как отлаживать код::Blocks
joshrduncan2012
Пожалуйста, ответьте на вышеприведенный пост, иначе СА никогда не узнает, что вы оставили ему сообщение.
Просто из любопытства, какую IDE вы используете?
lotussilva
блок кода
JackDingler
Фундаментальным навыком разработки является умение пользоваться отладчиком.
Кстати, эти поп-команды подозрительны. Что происходит, когда вы звоните pop и у вас нет данных?
Что происходит, когда вы вызываете pop() и top равен -1?
lotussilva
Тогда вы идете на стек под потоком!