K& R - getop()函数

时间:2017-11-19 18:04:59

标签: c kernighan-and-ritchie

我对第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()))

1 个答案:

答案 0 :(得分:1)

s[0]已经拥有第一个数字(或小数点)。如果不是这种情况,则函数将从此处返回:

if (!isdigit(c) && c != '.')
    return c; /* not a number */

c已在循环条件中分配到s[0]

while ((s[0] = c = getch()) == ' ' || c == '\t')
    ;