帮助K& Rs计数字符示例

时间:2009-11-01 21:41:09

标签: c kernighan-and-ritchie

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

谢谢:)

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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