argv和波兰记谱计算器

kai*_*ilo 5 c

我正在尝试解决使用argc和argv参数的K&R练习(5.10).它应该是一个使用命令行参数作为其输入的波兰表示法计算器.好吧,程序运行良好的'+'和' - '运算符,但我得到'*'的错误.我发现它有'*'符号专门做的事情,因为如果我用其他东西替换它,程序就可以了.有什么想法吗?谢谢.
注意:我没有包含函数stack_in,stack_out和print_stack.我认为它们很好.

#include <stdio.h>
#define MAXST 10
#define NUMBER '1'

void stack_in(int n);
int stack_out(void);
void print_stack(void);

int main(int argc,char **argv)
{
  char c,k;

while(--argc>0 && ++argv)
    while(c=*(*argv)++){
        if(c>='0' && c<='9')
            k=NUMBER;
        else
            k=c;
        switch (k){
            int g1,g2;

            case NUMBER:stack_in(c-'0');
                    break;
            case '+':g1=stack_out();
                 g2=stack_out();
                 stack_in(g1+g2);
                 break;
            case '-':g1=stack_out();
                 g2=stack_out();
                 stack_in(g2-g1);
                 break;
            case '*':g1=stack_out();
                 g2=stack_out();
                 stack_in(g1*g2);
                 break;
            default:printf("error on switch \n");
                break;
        }
}

print_stack();

return 0;
}
Run Code Online (Sandbox Code Playgroud)

Wes*_*ker 6

我想我已经完成了这个练习!

无论如何,命令行上的*运算符很可能变成"目录中的所有文件",这将无法正常工作.所以你需要在调用程序时引用它:

# rpmprog 2 3 '*'
Run Code Online (Sandbox Code Playgroud)

或者您可以对大多数shell使用反引号:

# rpmprog 2 3 \*
Run Code Online (Sandbox Code Playgroud)