我终于完成了 K&R,但遇到了另一个不清楚的代码。第 6.3/6.4 章
参考getword。它怎么能返回int,这应该是一个词。我知道它返回 word[0] 是第一个字母。但是在我看来,如果我想返回一个词,我会引入类似 char *getword 的东西。我对吗?
int 如何表示它是一个单词?还是关于getword:假设我输入“in”并在空格后按回车键。getword 读取 'i' 因为它不是空格,而 isalpha 所以第一个 if 被省略。那会发生什么?
我在 binsearch 中标记了该行。你不认为它应该是高 = 中 - 1;那里?
int getword(char *word, int lim) {
char *w = word;
int c;
while (isspace(c = getch()))
{}
if (c != EOF) {
*w++ = c;
}
if (!isalpha(c)) {
*w = '\0';
return c;
}
for ( ; --lim > 0; w++) {
if (!isalnum(*w = getch())) {
ungetch(*w);
break;
}
}
*w = '\0';
return word[0];
}
/* binsearch: find word in tab[0]...tab[n-1] */
struct key *binsearch(char *word, struck key *tab, int n)
{
int cond;
struct key *low = &tab[0];
struct key *high = &tab[n];
struct key *mid;
while (low < high) {
mid = low + (high-low) / 2;
if ((cond = strcmp(word, mid->word)) < 0)
high = mid; /* [3] */
else if (cond > 0)
low = mid + 1;
else
return mid;
}
return NULL;
}