Ошибка в работе программы на языке С

#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 \*

→ Ссылка