函数get_word应该从stdin读取单词并保存。保存白色字符后的下一个单词并在EOF上返回EOF,但我仍然处于无限循环中。 htab_lookup_add是一些将单词保存到表中的功能。似乎还有一个问题:“太长的消息”永远不会打印,但这不是我现在要解决的问题。
int get_word(char *s, int max, FILE *f){
s = malloc(sizeof(char) * max);
int c;
int i = 0;
while((c = getc(f))){
if(i > max || isspace(c)){
break;
}
s[i++] = c;
}
s[i] = '\0';
if(c == EOF){
return EOF;
}
return i;
}
while(get_word(word, (maxchar + 1), stdin) != EOF){
if(strlen(word) > maxchar){
printf("Too long!\n");
}
htab_lookup_add(table, word);
}
答案 0 :(得分:1)
此循环:
while((c = getc(f))){
...
}
仅在getc()
返回零时(即,它读取空字符'\0'
时终止)。当它返回EOF
时,您将把该值(转换为char
)存储在s[i]
中并继续循环。
循环后EOF
的测试将永远不匹配。
您需要在循环返回EOF
时结束循环。通常的成语是:
while ((c = getc(f)) != EOF) {
...
}