我试图在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循环。
会喜欢这方面的帮助, 谢谢!
答案 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