题目:
在上面的例子中,如果符号+或-的后面紧跟的不是数字,getint函数将把符号视为数字0的有效表达式。修改该函数,将这种形式的+或-符号重新写回到输入流中。
自我解答:
书本中的getint程序如下:
int getint(int *pn)
{
int c, sign;
while(isspace(c = getch()));
if(!isdigit(c) && c != EOF && c != '+' && c != '-')
{
ungetch(c);
return 0;
}
sign = (c == '-') ? -1 : 1;
if(c == '+' || c == '-')
c = getch();
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + c - '0';
*pn *= sign;
if(c != EOF)
ungetch(c);
return c;
}
当+或-后面的字符不是数字时,不会进到for循环体内,但是此时*pn被赋值了0,并进行*pn *= sign的运算。
修改后的程序如下:
int getint(int *pn)
{
int c, d, sign;
wh