[ create a new paste ] login | about

Link: http://codepad.org/m9T3sxmN    [ raw code | output | fork ]

C, pasted on May 15:
#include <stdio.h>

#define N 256
int main() {
  static char buff[N];
  double significant, floatingNumber;
  int exponent, i, rc;
  printf("floating-point: ");
  scanf("%s", buff);
  /* analyse floating-point expressio */
  {
    int i, expsign, sigsign;
    rc = 1;
    double k;
    significant = 0.0;
    exponent = 0;
    sigsign = 0;
    i = 0;
    if (buff[i] == 'e')
      rc = 0;
    /* sign */
    if (buff[i] == '-') {
      sigsign = 1;
      i++;
    }
    /* before point */
    for (; buff[i] && buff[i] != '.'&& buff[i] != 'e' ; i++) {
      if (buff[i] >= '0' && buff[i] <= '9') {
        significant = significant * 10.0;
        significant = significant + (buff[i] - '0');
      } else {
        rc = 0;
        break;
      }
    }
    /* after point */
    if (buff[i] == '.') {
      i++;
      k = 0.1;
      for (; buff[i] && buff[i] != 'e'; i++) {
        if (buff[i] >= '0' && buff[i] <= '9') {
          significant = significant + (k * (buff[i] - '0'));
          k = k / 10.0;
        } else {
          rc = 0;
          break;
        }
      }
    }
    /* exponential part */
    if (buff[i] == 'e') {
      i++;
      /* non-exponential indication : error */
      if (buff[i] == 0)
        rc = 0;
      expsign = 0;
      /* exponential sign */
      if (buff[i] == '+') {
        i++;
      } else if (buff[i] == '-') {
        expsign = 1;
        i++;
      }
      /* exponential indication */
      for (; buff[i]; i++) {
        if (buff[i] >= '0' && buff[i] <= '9') {
          exponent = exponent * 10;
          exponent = exponent + (buff[i] - '0');
        } else {
          rc = 0;
          break;
        }
      }
      if (expsign > 0)
      exponent = exponent * -1;
    }
    if (sigsign > 0)
    significant = significant * -1.0;
  }
  /* Good: rc = 1, Bad: rc = 0 */
  if (rc) {
    /* make double */
    floatingNumber = significant;
    if (exponent > 0) {
      for (i = 0; i < exponent; i++)
        floatingNumber *= 10.0;
    } else if (exponent < 0) {
      for (i = 0; i > exponent; --i)
        floatingNumber /= 10.0;
    }
    /* plus one */
    floatingNumber = floatingNumber + 1.0;
    printf("Floating Number: %f\n", floatingNumber);
  } else {
    printf("Bad format.\n");
  }
  return 0;
}
/* end */


Output:
1
floating-point: Floating Number: 1.000000


Create a new paste based on this one


Comments: