2011-03-31 51 views
5

我试图解决一个使用argc和argv参数的K练习(5.10)。它应该是一个波兰记号计算器,它使用命令行参数作为它的输入。好吧,程序对'+'和' - '运算符运行正常,但是我得到'*'的错误,我发现它有一些与'*'符号专门做的事情,因为如果我用别的东西代替它,程序任何想法?谢谢。
注意:我没有包含函数stack_in,stack_out和print_stack。我认为它们很好。argv和波兰记法计算器

#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; 
} 
+1

'*'正在通过shell进行扩展。 – 2011-03-31 13:34:27

+0

Ow我不会在一千年内猜到它的。谢谢大家! – kaiseroskilo 2011-03-31 13:38:46

回答

6

我想我已经做了非常锻炼!

无论如何,命令行中的*运算符很可能变成了“目录中的所有文件”,这是行不通的。所以,你需要引用它,当你调用程序:

# rpmprog 2 3 '*' 

,或者你可以使用反引号大部分炮弹:在命令

# rpmprog 2 3 \* 
2

你的操作系统使用“*”为通配符线;您对程序所做的任何更改都不会对此产生影响。您可以“逃离”在命令行上的符号 - 即

calculator 2 2 \* 
3

在Linux/UNIX shell中,应该附上单引号'*'之间的*如果你不希望它被扩大做由你的shell。