在下面的函数中:
[1] = '\0';
终止字符串?i = 0
之后,为什么开始从s[1]
开始取值而不是s[0]
?#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;
}
答案 0 :(得分:2)
该函数似乎将其结果存储在指向字符串的指针中,C样式为零终止。第一个getch
行将其结果存储在s[0]
中,如果它不是数字或句点,则会立即返回。将零作为第二个字符存储可确保返回的字符串正确结束 - 它只包含一个字符。
在初始步骤之后,您已经拥有一个有效字符,并将其存储在s[0]
中。因此,所有下一个getch
调用都需要从1开始存储,否则它将覆盖输入的第一个字符。