帮助K&Rs计数Chars示例

Isa*_*aac 3 c kernighan-and-ritchie

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

#include <stdio.h>

main(){
    double c;
    for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c)
        ;
    printf("%.0f\n",c);
}
Run Code Online (Sandbox Code Playgroud)

它根本无法正常工作.我在添加(getchar() != '\n')结束时,我按进入程序部分,但这并不能真正帮助的.

这是一些示例输出,使用gccMac OSX 10.6开发工具附带的.

pool-000:Desktop user$ ./a.out 
a
0
pool-000:Desktop user$ ./a.out 
asdf

2
pool-000:Desktop user$ ./a.out 
asfasf

3
Run Code Online (Sandbox Code Playgroud)

所以有些事情显然是错的.我在第18页,如果这有帮助的话.这不是功课,这是为了好玩!

谢谢 :)

unw*_*ind 5

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

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