关于K& R C中的getop()的查询

时间:2014-12-25 12:57:40

标签: c

在下面的函数中:

  1. 为什么它最初由s [1] = '\0';终止字符串?
  2. i = 0之后,为什么开始从s[1]开始取值而不是s[0]
  3. #define NUMBER '0'
    #define MAXSIZE 100
    char s[MAXSIZE];
    
    /* 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;
    }
    

1 个答案:

答案 0 :(得分:2)

  1. 该函数似乎将其结果存储在指向字符串的指针中,C样式为零终止。第一个getch行将其结果存储在s[0]中,如果它不是数字或句点,则会立即返回。将零作为第二个字符存储可确保返回的字符串正确结束 - 它只包含一个字符。

  2. 在初始步骤之后,您已经拥有一个有效字符,并将其存储在s[0]中。因此,所有下一个getch调用都需要从1开始存储,否则它将覆盖输入的第一个字符。