1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Хочу написать програмку-калькулятор (по книге Кернигана и Ритча). Суть простая: вводится выражение в форме обратной польской нотации, оно вычисляется и выводится результат.
Программу разбил на функции:
1) GetLine - получение строки (работает нормально). 2) calculate - вычисление и получение результата, вот тут проблема, при входе в функцию появляется та самая ошибка сегментирования. 3) getop - получение следующего элемента из строки. (тоже самое). 4) pop и push - работа со стеком. (работают тоже не правильно, но по крайней мере из-за них программа не вылетает).
Компилятор GCC.
calculate(Показать/Скрыть)
double calculate (char expr[]) {
char type; double op2;
printf ("Начало вычисления"); // я это специально здесь поставил, но до этого места даже не доходит.
while ( ( type = getop(expr) ) != EOE ) switch ( type ) { case NUMBER: ; break; case '+': push (pop() + pop()); break; case '-': op2 = pop(); push (pop() - op2); break; case '*': push (pop() * pop()); break; case '/': if ( (op2 = pop()) != 0.0) push (pop() / op2); else printf ("Ошибка: деление на нуль.\n"); break; default: printf ("Ошибка: неизвестная операция.\n"); break; }
return pop();
}
getop(Показать/Скрыть)
int getop (char expr[]) {
static int i; /* getop будет возвращать найденную операцию или NUMBER если найдено число, потом после того как calculate выполнит необходимые действия работа будет продолжена там, где остановилась.*/ int j; char op[10];