shaobin0604
11/26/2009 - 7:19 AM

Exercise 5-1

Exercise 5-1

/*
 * Exercise 5-1. As written,  getint treats a  + or  - not followed by a 
 * digit as a valid representation of zero. Fix it to push such a character
 * back on the input.
 */

#include <stdio.h>
#include <ctype.h>

int getch(void);
void ungetchar(int);

/* getint: get next integer from stdin into *pn */
int getint(int *pn)
{
	int c, d, sign;
	while (isspace(c = getch()))    /* skip the white space */
		;
	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 (*p = 0; isdigit(c); c = getch())
		*pn = 10 * *pn + (c - '0');
	*pn *= sign;
	if (c != EOF)
		ungetch(c);
	return c;
}