логические операторы в C K & R (польский обратный калькулятор) - PullRequest
0 голосов
/ 12 февраля 2019
 int getop(char s[])
 {
   int i, c;

   while ((s[0] = c = getch()) == ' ' || c == '\t')
      ;
   s[1] = '\0';
   i = 0;
   if (isalpha(c))              //math function found.
   {
        while (isalpha(s[++i] = c = getch()))
            ;
       s[i] = '\0';
       if (c != 'EOF')
          ungetch(c);
       return MATHLIB;
   }
   if ((c != '.'&&c != '-') &&!isdigit(c))     /*operand found*/
       return c;
   if (c == '-')
   {
       if (!isdigit(c = getch()))
       {
           ungetch(c);
           return '-';
       }
       else
       {
           ungetch(c);
       }
   }
   if (isdigit(c))               /*number found*/
   {                            
       {
           while (isdigit(s[++i] = c = getch()))
               ;
       }
       if (c == '.')
       {
           while (isdigit(s[++i] = c = getch()))
               ;
       }
       s[i] = '\0';
       if (c != EOF)
           ungetch(c);
       return NUMBER;
   }

}  

Это часть моего кода обратного польского калькулятора, который находится в рабочем состоянии.Проблема в том, что я попытался изменить строку

if ((c != '.'&&c != '-') &&!isdigit(c))     /*operand found*/

на

if ((c != '.'&&c != '-') && (c == '+' || c == '*' || c == '/' || c == '%'))

И хотя я думал, что она будет работать правильно, это не сработало.Функция switch в main () вообще не будет ловить операторы.Кроме того, каждое возвращаемое значение собиралось по умолчанию: printf («ошибка»);

Я не понимаю, почему это не сработало, и это беспокоит меня.Любой совет?

1 Ответ

0 голосов
/ 12 февраля 2019

Обычно это должно работать, но вы должны проверить в режиме отладки, что происходит.Я думаю, это связано с тем, что getch () возвращает char, а вы сохраняете его в int ... но, пожалуйста, проверьте, как он работает

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