我对第78页的K& R中使用的getop函数有疑问。下面是实现。
/* getop: get next character or numeric operand */
int getop(char s[])
{
int i, c;
while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if (!isdigit(c) && c != '.')
return c; /* not a number */
i = 0;
if (isdigit(c)) /* collect integer part */
while (isdigit(s[++i] = c = getch()))
;
if (c == '.') /* collect fraction part */
while (isdigit(s[++i] = c = getch()))
;
s[i] = '\0';
if (c != EOF)
ungetch(c);
return NUMBER;
}
假设输入的数字是一个数字,那么为什么我们从s [1]开始,如下所示。 为什么不从s [0]?
i = 0;
if (isdigit(c)) /* collect integer part */
while (isdigit(s[++i] = c = getch()))
答案 0 :(得分:1)
s[0]
已经拥有第一个数字(或小数点)。如果不是这种情况,则函数将从此处返回:
if (!isdigit(c) && c != '.')
return c; /* not a number */
c
已在循环条件中分配到s[0]
:
while ((s[0] = c = getch()) == ' ' || c == '\t')
;