text: #include <ctype.h>
  #include <stdio.h>
  #include <string.h>
  #include <math.h>
  
  int getch(void);
  void ungetch(int);
  
  /* 将输入中的下一个整型数赋值给*pn */
  int getint(int *pn)
  {
    int c, d, sign;
  
    while (isspace(c=getch()))
      ;
    if (!isdigit(c) && c != EOF && c!='-' && c!='+') 
    {
      ungetch(c);
      return 0;
    }
    sign = c == '-' ? -1 : 1;
    if (c == '+' || c == '-')
    {
      d = c;
      if (!isdigit(c=getch()))
      {
        if (c != EOF)
          ungetch(c);
        ungetch(d);
        return d;
      }
    }
    for (*pn = 0; isdigit(c);c = getch() )
      *pn = *pn * 10 + c - '0';
    *pn *= sign;
    if (c != EOF)
      ungetch(c);
    return c;
  }
  
  #define BUFSIZE 100
  
  static char buf[BUFSIZE]; /* 用于ungetch函数的缓冲区 */
  static int bufp = 0;      /* buf中下一个空闲位置 */
  
  /* 取一个字符 */
  int getch(void)
  {
    return (bufp > 0) ? buf[--bufp] : getchar();
  }
  
  /* 把字符压回到输入中 */
  void ungetch(int c)
  {
    if (bufp >= BUFSIZE)
      printf("ungetch: too many characters\n");
    else
      buf[bufp++] = c;
  }
  
  #define SIZE 10
  
  int main(int argc, char **argv)
  {
    int n, array[SIZE];
  
    memset(array, 0, sizeof(array));
    for (n = 0; n < SIZE && getint(&array[n]) != EOF; n++)
      ;
  
    for (int i = 0; i < n;i++) {
      printf("%d\n", array[i]);
    }
  
    return 0;
  }