Ошибка в работе программы на языке С
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAXVAL 100
double stack[MAXVAL];
int sp = 0;
void push(double f){
if (sp < MAXVAL) stack[sp++] = f;
else printf("Error: stack is full, no memory for %g\n", f);
}
double pop(void){
if (sp > 0) return stack[--sp];
else {
printf("Error: no stack\n");
return 0;
}
}
int main(int argc, char *argv[]){
char *c;
double op2;
int flag = 1;
for (int i = 1; i < argc; i++){
c = argv[i];
if (*c == '+'){
push(pop() + pop());
}
else if (*c == '*'){
push(pop() * pop());
}
else if (*c == '-'){
op2 = pop();
push(pop() - op2);
}
else if (*c == '/'){
op2 = pop();
if (op2 != 0.0) push(pop() / op2);
else{
printf("Division by zero\n");
}
}
else if (isdigit((unsigned char)*c)) push(atof(c));
}
if (sp > 0 && flag) printf("%.8f\n", pop()); // Печатаем результат
else printf("Error: no result on the stack\n");
return 0;
}
Доброго времени суток! Не могу понять, почему знак * обрабатывается некорректно. Буду благодарен за помощь!
Ответы (1 шт):
Автор решения: avp
→ Ссылка
Наверное вы вызываете в терминале из bash (или другого shell) и он вместо * подставляет список файлов в текущем каталоге.
Попробуйте ./a.out 2 3 \*