3

我正在阅读 K&R 的第 2 版,我被这个看似简单的例子难住了:

#include <stdio.h>

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

它根本无法正常工作。我在(getchar() != '\n')按 Enter 键时添加了结束程序的部分,但这也无济于事

这是一些示例输出,使用的gcc是 Mac 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

所以很明显有些不对劲。我在第 18 页,如果有帮助的话。这不是作业,这是为了好玩!

谢谢 :)

4

2 回答 2

5

每次调用都getchar()将等待读取一个字符,因此您在每次循环迭代时读取的内容比您想象的要多。

另外,至少在我看来,计数器(几乎)从不 a double,您应该使用整数类型,例如普通 old int

于 2009-11-01T21:45:39.043 回答
3

执行两个“getchar()”操作的问题是您将在条件测试中阅读两个 get chars ......在您到达 ++c 之前。

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

于 2009-11-01T21:56:04.127 回答