我正在通过K& R的第2版,我已经被这个看似简单的例子所困扰:
#include <stdio.h>
main(){
double c;
for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c)
;
printf("%.0f\n",c);
}
它根本无法正常工作。当我按下回车键时,我在(getchar() != '\n')
部分添加了以结束程序,但这确实也没有帮助。
这是一些示例输出,使用Mac OSX 10.6开发工具附带的gcc
。
pool-000:Desktop user$ ./a.out
a
0
pool-000:Desktop user$ ./a.out
asdf
2
pool-000:Desktop user$ ./a.out
asfasf
3
所以事情显然是错的。我在第18页,如果这有帮助的话。这不是功课,这是为了好玩!
谢谢:)
答案 0 :(得分:5)
对getchar()
的每次调用都会等待一个字符被读取,所以你读取的次数比你在每次迭代循环时所想的要多。
此外,至少在我看来,一个计数器(几乎)从不是double
,你应该使用整数类型,例如普通的int
。
答案 1 :(得分:3)
执行两个“getchar()”操作的问题是,在进入++ c之前,您将在条件测试中读取两个字符。
抛弃“EOF”比较,它应该按预期工作。