我刚刚开始编程并使用Codeblocks编译器。使用此代码
long x = 0;
while(getchar() != EOF){
++x;
}
printf("%ld\n", x);
我正在尝试计算输入的字符,但每次运行程序时都不会打印任何内容。
然而,这个版本
long x = 0;
while(getchar() != EOF){
++x;
printf("%ld\n", x);
}
成功打印字符数,但另一方面它计算每个字符(它显示1,2,3,4而不是4)。
感谢您的回答。
答案 0 :(得分:4)
你是如何运行程序的,你是如何提供输入的?我的假设如下:
如果这些都是真的,你需要输入EOF字符(在Windows上按ctrl + z,在Mac上按ctrl + d,在其他unix上可能相同)。或者,您可以使用< file.ext
语法为程序提供文件。例如:./a.out < input.txt
答案 1 :(得分:1)
实际上你在while循环中使用了EOF,这意味着&#34;文件的结尾&#34;,它基本上是在你想从文本文件中读取时使用的。 现在我向你解释你的两个代码中发生了什么,而不是告诉你如何解决它。
第一个代码:
long x = 0;
while(getchar() != EOF){
++x;
}
printf("%ld\n", x);
只要EOF没有发生,你就从键盘输入输入,一旦发生EOF,循环就会中断并且执行printf()但是在这种情况下不会发生EOF,因此没有任何意义打印。
第二段代码:
long x = 0;
while(getchar() != EOF){
++x;
printf("%ld\n", x);
}
只要EOF没有发生,循环就会继续,并且会继续打印x的值,因为whilef循环中存在printf(),因此printf()将执行循环次数迭代。
解决方案: 用其他东西替换EOF,任何其他角色,例如像这样的空间
long x = 0;
while(getchar() != ' '){
++x;
}
printf("%ld\n", x);