argv и польский калькулятор - PullRequest
5 голосов
/ 31 марта 2011

Я пытаюсь выполнить упражнение K & R (5.10), в котором используются аргументы argc и argv. Предполагается, что это калькулятор польской нотации, использующий аргументы командной строки в качестве «input.Well, программа работает нормально для» + 'и' - ', но я получаю ошибки за' * '. Я понял, что это как-то связано именно с символом' * ', потому что, если я заменю его чем-то другим, программа работает. Есть идеи? Спасибо .
Примечание: я не включал функции 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;
}

Ответы [ 3 ]

6 голосов
/ 31 марта 2011

Я думаю, что я выполнил это упражнение!

В любом случае, вполне вероятно, что оператор * в командной строке превращается в «все файлы в каталоге», что не будет работать.Поэтому вам нужно указать это при вызове программы:

# rpmprog 2 3 '*'

или вы можете использовать обратные кавычки для большинства оболочек:

# rpmprog 2 3 \*
3 голосов
/ 31 марта 2011

В оболочках Linux / UNIX вы должны заключить * в одинарные кавычки '*', если не хотите, чтобы он расширялся вашей оболочкой.

2 голосов
/ 31 марта 2011

Ваша операционная система использует «*» для подстановочного знака в командной строке;никакие изменения, внесенные в вашу программу, не повлияют на это.Вы можете быть в состоянии «экранировать» символ в командной строке - т.е.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...