home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tyc / list1716.c < prev    next >
C/C++ Source or Header  |  1993-10-16  |  1KB  |  67 lines

  1.  /* Using character test macros to create an integer */
  2.  /* input function. */
  3.  
  4.  #include <stdio.h>
  5.  #include <ctype.h>
  6.  
  7.  int get_int(void);
  8.  
  9.  main()
  10.  {
  11.      int x;
  12.      x =  get_int();
  13.  
  14.      printf("You entered %d.", x);
  15.  }
  16.  
  17.  int get_int(void)
  18.  {
  19.      int ch, i, sign = 1;
  20.  
  21.      /* Skip over any leading white space. */
  22.  
  23.      while ( isspace(ch = getchar()) )
  24.          ;
  25.  
  26.      /* If the first character is non-numeric, unget */
  27.      /* the character and return 0. */
  28.  
  29.      if (ch != '-' && ch != '+' && !isdigit(ch) && ch != EOF)
  30.      {
  31.          ungetc(ch, stdin);
  32.          return 0;
  33.      }
  34.  
  35.      /* If the first character is a minus sign, set */
  36.      /* sign accordingly. */
  37.  
  38.      if (ch == '-')
  39.          sign = -1;
  40.  
  41.      /* If the first character was a plus or minus sign, */
  42.      /* get the next character. */
  43.  
  44.      if (ch == '+' || ch == '-')
  45.          ch = getchar();
  46.  
  47.      /* Read characters until a non-digit is input. Assign */
  48.      /* values, multiplied by proper power of 10, to i. */
  49.  
  50.      for (i = 0; isdigit(ch); ch = getchar() )
  51.          i = 10 * i + (ch - '0');
  52.  
  53.      /* Make result negative if sign is negative. */
  54.  
  55.      i *= sign;
  56.  
  57.      /* If EOF was not encountered, a nondigit character */
  58.      /* must have been read in, so unget it. */
  59.  
  60.      if (ch != EOF)
  61.          ungetc(ch, stdin);
  62.  
  63.      /* Return the input value. */
  64.  
  65.      return i;
  66.  }
  67.