C 帮助K&;Rs计数字符示例
我正在阅读K&R的第二版,我被这个看似简单的例子难住了: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()都将
#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