《c语言程序设计》5-1


若+、-中非数字,getint将把该符号视为数字0的表达式之一;修改该函数,将这样的符号压回 ungetch

用一个状况布尔: to_sembol (在符号时)来进行分情况


#include   
#include 
#include 

int getch(void);
void ungetch(int);

int getint(int* pn) {
	int c, sign;
	char  d;
	bool to_sembol = 0;

	while (isspace(c = getch()));
	if (!isdigit(c) && c != EOF && c != '+' && c != '-') {
		ungetch(c);
		return 0;
	}
	sign = (c == '-') ? -1 : 1;

	if (to_sembol == 1 && !isdigit(c) && c != EOF) {
		ungetch(0);
	}

	
	if (to_sembol ==0) {
		if (c == '+' || c == '-') {
			to_sembol = true;
			c = d;
		}
	for (*pn = 0; isdigit(c); c = getch())
		*pn = 10 * *pn + (c - '0');
	*pn *= sign;
	
	if (c != EOF)
		ungetch(c);
}
	return c;

}