【问题标题】:argv and polish notation calculatorargv 和波兰符号计算器
【发布时间】:2011-03-31 13:31:52
【问题描述】:

我正在尝试解决一个使用 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;
}

【问题讨论】:

  • * 正在被你的 shell 扩展。
  • 一千年后我都猜不到。谢谢大家!

标签: c


【解决方案1】:

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

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

# rpmprog 2 3 '*'

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

# rpmprog 2 3 \*

【讨论】:

    【解决方案2】:

    在 Linux/UNIX shell 上,如果不希望 shell 扩展 *,则应将 * 括在单引号 '*' 之间。

    【讨论】:

      【解决方案3】:

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

      calculator 2 2 \*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多