Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C argv和波兰符号计算器_C - Fatal编程技术网

C argv和波兰符号计算器

C argv和波兰符号计算器,c,C,我正在尝试解决一个使用argc和argv参数的K&R练习(5.10)。它应该是一个使用命令行参数作为“输入”的波兰符号计算器。这个程序对于“+”和“-”运算符运行良好,但是对于“*”我会出错。我发现它与“*”符号有特殊关系,因为如果我用其他东西替换它,程序就会工作。有什么想法吗?谢谢。 注意:我没有包括stack\u in、stack\u out和print\u stack函数。我认为它们很好 #include <stdio.h> #define MAXST 10 #define N

我正在尝试解决一个使用argc和argv参数的K&R练习(5.10)。它应该是一个使用命令行参数作为“输入”的波兰符号计算器。这个程序对于“+”和“-”运算符运行良好,但是对于“*”我会出错。我发现它与“*”符号有特殊关系,因为如果我用其他东西替换它,程序就会工作。有什么想法吗?谢谢。
注意:我没有包括stack\u in、stack\u out和print\u 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;
}
#包括
#定义MAXST 10
#定义数字“1”
无效堆栈_in(int n);
int stack_out(无效);
无效打印堆栈(无效);
int main(int argc,字符**argv)
{
字符c,k;
而(--argc>0&&++argv)
而(c=*(*argv)+){

如果(c>='0'&&c我想我已经做了这个练习

无论如何,命令行上的*运算符很可能会变成“目录中的所有文件”,这将不起作用。因此,在调用程序时,您需要引用它:

# rpmprog 2 3 '*'
也可以对大多数Shell使用反引号:

# rpmprog 2 3 \*

您的操作系统在命令行上使用“*”作为通配符;您对程序所做的任何更改都不会影响这一点。您可以在命令行上“转义”符号,即


在Linux/UNIX shell上,如果您不想让它被shell扩展,您应该将
*
括在单引号
'*'
之间。

您的shell正在扩展
*
。现在我已经猜不到了。谢谢大家!
calculator 2 2 \*