⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data.c

📁 c版本的
💻 C
📖 第 1 页 / 共 2 页
字号:

   index = inline[col];
   if (((index > '0') && (index <= '9')) ||
       ((index == '0') && (decpt == 1))  ||
        (index == '.')) {                        /* floating number */
      newval = 0.0;
      while ((index >= '0') && (index <= '9')) {
         newval = 10.0*newval + (index - '0');
         col++;
         index = inline[col];
      }
      if (index == '.') {
         double constant = 0.1;
         col++;
         index = inline[col];
         while ((index >= '0') && (index <= '9')) {
            newval = newval + (index - '0') * constant;
            constant *= 0.1;
            col++;
            index = inline[col];
         }
      }
      return(newval);
   }                                /* end of floating point number */

   if (index == '0') {                      /* octal or hexadecimal */
      col++;
      index = inline[col];
      if ((index == 'x') || (index == 'X')){         /* hexadecimal */
         col++;
         index = inline[col];
         newval = 0.0;
         while (((index >= '0') && (index <= '9')) ||
                ((index >= 'A') && (index <= 'F')) ||
                ((index >= 'a') && (index <= 'f'))) {
            switch (index) {
               case '0':
               case '1':
               case '2':
               case '3':
               case '4':
               case '5':
               case '6':
               case '7':
               case '8':
               case '9':i = index - '0';
                        break;
               case 'A':
               case 'B':
               case 'C':
               case 'D':
               case 'E':
               case 'F':i = index - 'A' + 10;
                        break;
               case 'a':
               case 'b':
               case 'c':
               case 'd':
               case 'e':
               case 'f':i = index - 'a' + 10;
                        break;
               default :break;
            }
            newval = 16.0*newval + i;
            col++;
            index = inline[col];
         }
      return(newval);
      }                                  /* end of hexadecimal 'if' */

      else {                                               /* octal */
         newval = 0.0;
         while ((index >= '0') && (index <= '7')) {
            newval = 8.0*newval + (index - '0');
            col++;
            index = inline[col];
         }
      return(newval);
      }                                      /* end of octal 'else' */

   }                         /* end of octal or hexadecimal numbers */

                                  /* find variable or function name */
   if ((inline[col] >= 'A') && (inline[col] <= 'Z')) {
      name[0] = inline[col++];
      i = 1;
      while ((((inline[col] >= 'A') && (inline[col] <= 'Z')) ||
             ((inline[col] >= '0') && (inline[col] <= '9'))) &&
             (i <= 5)) {           /* continue var or function name */
         name[i++] = inline[col++];
      }
      name[i] = 0;                                    /* name found */

      if (inline[col] == '('){                     /* function call */
         col++;
         if (strcmp(name,"ABS") == 0) {
            calcdata(&newval);
            if (newval < 0.0) newval = -newval;
         }
         else if (strcmp(name,"SQRT") == 0) {
            calcdata(&newval);
            if (newval < 0.0) {
               errchk(5);                     /* Neg value for SQRT */
               newval = 0.0;
            }
            else newval = sqrt(newval);
         }
         else if (strcmp(name,"FACT") == 0) {
            calcdata(&newval);
            if (newval < 0.0) {
               errchk(16);                    /* Neg value for FACT */
               newval = 0.0;
            }
            else {
            double count;
            int howmany;
               count = newval;
               newval = 1.0;
               for (howmany = count;howmany > 1;howmany--) {
                  count = howmany;
                  newval = newval * count;
               }
            }
         }
         else if (strcmp(name,"EXP") == 0) {
            calcdata(&newval);
            newval = exp(newval);
         }
         else if (strcmp(name,"LOG") == 0) {
            calcdata(&newval);
            if (newval < 0.0) {
               errchk(7);                      /* Neg value for LOG */
               newval = 0.0;
            }
            else newval = log(newval);
         }
         else if (strcmp(name,"SIN") == 0){
            calcdata(&newval);
            newval = sin(newval);
         }
         else if (strcmp(name,"COS") == 0){
            calcdata(&newval);
            newval = cos(newval);
         }
         else if (strcmp(name,"ATAN") == 0){
            calcdata(&newval);
            newval = atan(newval);
         }
         else {
            errchk(6);                        /* function not found */
            newval = 0.0;
         }
         col--;
         return(newval);
      }                                     /* end of function call */

      else {                                       /* variable name */
         for (i = 0;i < 12;i++) {
            if ((strcmp(name,allvars[i].varname)) == 0) {
               newval = allvars[i].value;
               return(newval);
            }
         }
         errchk(3);                           /* variable not found */
         newval = 0.0;
         return(newval);
      }                                     /* end of variable call */

   }                            /* end of variable or function call */
   errchk(9);
   return(0.0);                               /* invalid data found */
}

/* ********************************************************** getop */
/* A call to this function expects to find an operator, end of line */
/* or a close parenthesis.                                          */
char getop(void)
{
   while (inline[col] == ' ') col++;               /* ignore blanks */
   switch (inline[col]){
      case '$':
      case ')':
      case  0 :
      case '+':
      case '-':
      case '*':
      case '/': break;
      default : errchk(4);                      /* invalid operator */
   }
   return(inline[col]);
}

/* ********************************************************* errchk */
/* The error code is stored by this function and the cursor column  */
/* is adjusted in an attempt to put the cursor near the error that  */
/* caused the problem.                                              */
void errchk(int err)
{
   if(errcode) return;                       /* error already found */
   else {                         /* only the first error is stored */
      errcode = err;                      /* store the error number */
      switch (err){
         case 2  :
         case 4  :
         case 8  :
         case 9  :
         case 10 :
         case 11 :
         case 12 : colerr = col;
                   break;
         case 1  :
         case 3  : colerr = col - 1;
                   break;
         case 6  : colerr = col - 2;
                   break;
         case 5  :
         case 7  : colerr = col - 3;
                   break;
         default : colerr = col;
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -