【问题标题】:Counting the characters in C计算C中的字符
【发布时间】:2014-06-29 01:14:27
【问题描述】:

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

感谢您的回答。

【问题讨论】:

  • 运行程序时,控制台是否显示为单独的窗口,然后在您发送 EOF 时关闭?
  • 你如何发送EOF
  • EOF 替换为'\n'。当您输入一些字符并按回车键时,它应该会打印出正确的数字。
  • EOF 是文件结尾。通过行尾更改它,即'\n'。
  • (忽略 - 我是盲人..)

标签: c


【解决方案1】:

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

  1. 您正在通过终端运行程序
  2. 在您按下 ctrl + c 之前,程序实际上不会结束,并且您期望
  3. 您通过键盘输入字符来提供输入

如果这些都是真的,您将需要输入 EOF 字符(在 Windows 上为 ctrl + z,在 Mac 上为 ctrl + d,在其他 unix 上可能相同)。或者,您可以使用< file.ext 语法为程序提供文件。例如:./a.out < input.txt

【讨论】:

  • 值得注意的是,在 Windows 上,您必须在行首键入 Ctrl-Z,然后按 Enter/Return,或者重复按 Ctrl-Z(2-3 次?)丢弃线路上的所有输入并发送 EOF 代替。在其他为 Ctrl-D 的系统上,如果您没有输入任何其他内容,则只需按它即可结束程序;无需按 Enter/Return。否则,您必须反复按 Ctrl-D(可能 2-3 次)才能发送 EOF。
【解决方案2】:

实际上,您在 while 循环中使用 EOF,意思是“文件结束”,它基本上是在您想从文本文件中读取时使用。 现在我向你解释你的两个代码中发生了什么,然后我会告诉你如何解决它。

第一个代码:

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 的值,因为 printf() 存在于 while 循环中,因此 printf() 将执行与循环迭代一样多的次数。

解决方案: 用其他东西替换 EOF,任何其他字符,例如这样的空格

long x = 0;

while(getchar() != ' '){
    ++x;
}

printf("%ld\n", x);

【讨论】:

  • 哦,我明白了,我还不知道它不是文件结尾,谢谢
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 2017-04-19
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多