【发布时间】:2018-01-11 18:02:38
【问题描述】:
我正在尝试制作一个程序,它可以在 EOF 之前读取单词,然后对这些单词执行一些操作。它现在做什么并不重要,所以我们只是说它会立即将它们打印回来。所以这就是它在控制台中的样子:
这些是一些词[然后我在这里按下 EOF 键]
这些
是
一些
单词
这是我尝试过的方式:
#include <stdio.h>
#include <string.h>
#define MAX 21
int r_word(char s[]){
char c;
int i = 0;
while((c=getchar())!=EOF && c!=' '){
s[i] = c;
i++;
}
s[i] = '\0';
return i;
}
int main(){
char word[MAX];
int d;
while((d = r_word(word))>0){
printf("%s\n", word);
}
return 0;
}
所以我的想法是 r_word 函数将一个单词逐个字符存储在字符串 's' 中,以便它可以检查 EOF。 但是,与我的预期不同,这就是我运行它时的样子:
这些是一些词[EOF]
这些
是
一些 [然后它停在这里,我猜仍然在循环中] [再次点击EOF]
单词
因此,无论我输入多少个单词,它都会打印出除最后一个以外的所有单词,然后程序就会挂在那里,直到我在打印出最后一个单词时再次点击 EOF。 有什么想法吗?
附:这是一个学校示例,其中我们不允许使用任何高级扫描方法,例如 fscanf 或其他。只允许使用基本功能。
【问题讨论】:
-
char c-->int c输入EOF表示ctrd+d/w和Enter -
如果一个单词的长度超过
MAX会怎样? -
我还没有开始处理那个案子,但我认为现在不相关
-
我说的修改你做了吗?
-
@koy - 你应该首先学会考虑它。忘记这些事情的编码人员只会留下错误 - 将来会咬他们