计算C中的字符

时间:2014-06-29 01:14:28

标签: c

我刚刚开始编程并使用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)。

感谢您的回答。

2 个答案:

答案 0 :(得分:4)

你是如何运行程序的,你是如何提供输入的?我的假设如下:

  1. 您正在通过终端
  2. 运行程序
  3. 程序实际上不会结束,直到你点击ctrl + c,你希望
  4. 您通过键盘输入字符来提供输入
  5. 如果这些都是真的,你需要输入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);