C K&R中的逻辑运算符(波兰语反向计算器)

时间:2019-02-12 14:12:44

标签: c

 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 == '%'))

即使我认为它可以正常工作, 根本没有。 main()中的switch函数根本不会捕获运算符。 最重要的是,每个返回值都将是默认值:printf(“ error”);

我不明白为什么它不起作用,它困扰着我。 有什么建议吗?

1 个答案:

答案 0 :(得分:-2)

通常它应该可以工作,但是您应该在调试模式下检查情况。我想这与事实有关,即getch()返回char并将其存储在int中...但是请检查其运行方式