5-1 在上面的例子中,如果符号+或-的后面紧跟的不是数字,getint函数将把符号视为数字0的有效表达方式。修改该函数,将这种形式的+或-号重新写回到输入流中。
#include<ctype.h>
void ungetch(int); //表示吧读取的内容放回输入流
int getch(void); //表示从输入流中读取一个内容
int getint(int *pn) {
int c,sign,d;
while(isspace(c = getch())); //去除空格
if(!isdigit(c = getch()) && c!='+' && c!='-' && c!=EOF){
ungetch(c);
return 0;
}
sign = c == '-'?-1:1; // sign赋初值
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 = 10 * *pn + *pn-'0';
}
*pn *= sign;
if(c != EOF){
ungetch(c);
}
return c;
}