Удивительный вывод программы на C при использовании '*' для умножения

После решения упражнения 5-10 в K & R:

Напишите программу expr, которая вычисляет обратное польское выражение из командной строки, где каждый оператор или операнд является отдельным аргументом. Например, expr 2 3 4 + * оценивает 2 * (3 + 4).

Похоже, проблема в выражениях с символом «*», даже в таких, как: 2 2 *. По какой-то странной причине '*' не помещается воператор массив, в то время как все другие символы, такие как '+', '-', '/' обычно являются. Я выделил ту часть кода (цикл while), которая кажется неправильной. Функция Push - из главы 4, и она необходима только для компиляции кода.

#include <stdio.h>

void push(double f);

main(int argc, char *argv[])
{
    int a = 0;
    int b;
    char operator[10];

    while (--argc > 0) {
        if (isdigit(*argv[argc]))
            push(atof(argv[argc]));
        else if (*argv[argc]=='+' || *argv[argc]=='-' || *argv[argc]=='*' || *argv[argc]=='/')
            operator[a++] = *argv[argc];
    }
    for (b = 0; b < a; b++)
        printf("%c", operator[b]);
    printf("\n");

    return 0;
}

#define MAXVAL 100  /* maximum depth of val stack */

int sp = 0;     /* next free stack position */
double val[MAXVAL]; /* value stack */

/* push: push f onto value stack */
void push(double f)
{
    if (sp < MAXVAL) 
        val[sp++] = f;
    else
        printf("error: stack full, can't push %g\n", f);
}

Выход

[user@machine Desktop]$ ./prog + +
++
[user@machine Desktop]$ ./prog *

[user@machine Desktop]$ ./prog * *

[user@machine Desktop]$ ./prog + / * -
-/+

Ответы на вопрос(1)

Ваш ответ на вопрос