帮助K&Rs计数Chars示例

我正在通过K&R的第二版工作,我一直被这个看似简单的例子所困扰:

#include  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页,如果有帮助的话。 这不是功课,这是为了好玩!

谢谢 :)

每次调用getchar()都会等待一个字符被读取,所以你读取的次数比你在每次循环迭代时所想的要多。

此外,至少在我看来,一个计数器(几乎)永远不会是一个double ,你应该使用一个整数类型,如普通的旧int

执行两个“getchar()”操作的问题在于,在进入++ c之前,您将在条件测试中读取两个字符。

放弃“EOF”比较,它应该按预期工作。