Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 帮助K&;Rs计数字符示例_C_Kernighan And Ritchie - Fatal编程技术网

C 帮助K&;Rs计数字符示例

C 帮助K&;Rs计数字符示例,c,kernighan-and-ritchie,C,Kernighan And Ritchie,我正在阅读K&R的第二版,我被这个看似简单的例子难住了: #include <stdio.h> main(){ double c; for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c) ; printf("%.0f\n",c); } 所以很明显有些地方出了问题。我在第18页,如果有帮助的话。这不是家庭作业,这是为了好玩 谢谢:)每次调用getchar()都将

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

#include <stdio.h>

main(){
    double c;
    for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c)
        ;
    printf("%.0f\n",c);
}
所以很明显有些地方出了问题。我在第18页,如果有帮助的话。这不是家庭作业,这是为了好玩

谢谢:)

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


另外,至少在我看来,计数器(几乎)永远不会是双精度的,你应该使用一个整数类型,比如普通的old
int

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


抛开“EOF”的比较,它应该会像你期望的那样工作。

看起来你有一些基本问题;你到底想完成什么?我想你没有用Ctrl+D终止输入。请恢复到原始实现(没有
!='\n'
)并在输入结束时按Ctrl+D。谢谢,Mehrdad,这就是问题所在。非常感谢!如果你把它作为一个答案提交,我会接受它。+1,也许把
getchar()
info放在首位?这是他的代码的主要问题。使用
double
是次要的。是第二个
getchar()
导致了问题–谢谢!不过,K&R的代码中有
double
。这也是一个很好的观点!谢谢–我现在对getchar()的工作原理有了更好的了解,对C如何解释ctrl-D/EOF也有了更好的了解。
pool-000:Desktop user$ ./a.out 
a
0
pool-000:Desktop user$ ./a.out 
asdf

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

3