《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;
}