我正在尝试解决使用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;
}
答案 0 :(得分:6)
我想我已经做了很多练习!
无论如何,命令行上的*运算符很可能变成“目录中的所有文件”,这将无效。所以你需要在调用程序时引用它:
# rpmprog 2 3 '*'
或者您可以对大多数shell使用反引号:
# rpmprog 2 3 \*
答案 1 :(得分:3)
在Linux / UNIX shell上,如果您不希望shell扩展*
,则应将'*'
括在单引号{{1}}之间。
答案 2 :(得分:2)
您的操作系统在命令行中使用“*”作为通配符;您对程序所做的任何更改都不会对此产生影响。您可以在命令行上“转义”符号 - 即。,
calculator 2 2 \*