从stdin中读取字符到C中的EOF

时间:2017-11-15 12:27:51

标签: c stdin

我试图在C中读取字符串直到EOF,但在输入下一个字符之前对每个字符作出反应。 例如: 用户输入abcd,在每个字符输入后,我会对每个字符进行一些计算。 我试图以两种不同的方式来解决这个问题:

选项1,使用getchar():

int d;
char c;

while ((d = getchar()) != EOF) {
    c = (char)d;
    <<< DO SOME CALCULATIONS ON 'c'>>>
    }

选项2,使用scanf:

char c;
while (scanf(" %c",&c) != EOF) {
    <<< DO SOME CALCULATIONS ON 'c'>>>
}

但是,这两种方法似乎都失败了。似乎getchar()和scanf()获取所有字符,直到它遇到&#39; EOF&#39;,然后才进入while循环。

会喜欢这方面的帮助, 谢谢!

1 个答案:

答案 0 :(得分:-2)

scanf手册说:

“如果在第一次成功转换或a之前达到输入结束,则返回值EOF        匹配失败发生。如果发生读取错误,也会返回EOF,在这种情况下,错误指示符为        设置了流(参见ferror(3)),设置了errno表示错误。“

..在这种情况下更好地使用带有scanf的do..while approch(如果你想要存储返回scanf以检查错误):

char c;

do{
  scanf("%c",&c);
  /* DO SOME CALCULATIONS ON 'c' */
}while(c != EOF);

与原始模式下的getchar()相同,将对每个用户击键做出反应

使用原始模式查看此内容:https://stackoverflow.com/a/22517349/8907248