使用while循环计算输入中的字符数

3
我写了一个简单的C程序来计算字符数量。
#include <stdio.h>
main()
{
    long nc;
    nc = 0;

    while (getchar() != EOF)
      ++nc;

    printf("%ld\n", nc);
}

这个程序没有输出字符。经过不同测试案例的尝试,我发现我陷入了一个无限while()循环中。

1
尝试使用:while (getchar() != '\n')。请记住,getchar() 不会终止直到你发送一个回车 (\n)。 - Sir Jo Black
4个回答

7

这个程序没有输出字符

它不会输出字符。你没有添加任何打印语句。

我发现我被困在一个无限循环中

如果你没有达到退出条件,你将一直处于循环中。你需要使用 EOF 来退出循环。使用:

  • CTRL+Z(在 Windows 上)
  • CTRL+D(在 Linux 上)

现在,解决方案如下:

  1. getchar() 不会打印值。如果需要打印,你必须显式存储并使用 putchar() 打印。

  2. 你可以提供 EOF 或更改 while() 的退出条件以退出该关键的无限循环。


除了编码问题,你还需要考虑逻辑问题。在当前代码形式中,getchar() 将换行符 (\n) 也视为一个有效字符。举个例子,输入以下内容:

$ ./a.out  ENTER
a      ENTER
s      ENTER
d      ENTER
f       ENTER
g      ENTER
CTRL+D

将会产生以下结果:

10

但这通常不被称为“字符计数”。你可能还需要重新审视这部分逻辑。

话虽如此,建议 main() 的签名为 int main(void)


5

请尝试以下方法

#include <stdio.h>

int main( void )
{
    int c;
    long nc = 0;

    while ( ( c = getchar() ) != EOF && c != '\n' ) ++nc;

    printf( "%ld\n", nc );
}

你需要生成 EOF 状态(在 UNIX 系统中使用 Ctrl+d,在 Windows 中使用 CTRL+z),或者只需按 Enter 键。


1
@Sourav Ghosh 谢谢。这是我复制粘贴时犯的错误。 :) - Vlad from Moscow
没问题先生,这种情况我们都会遇到。只是注意到这件事,所以想写个备注。干杯 :-) - Sourav Ghosh
@VladfromMoscow 它仍然没有打印出字符的数量。 - bilcy
我运行了程序,输出了正确的结果。也许你的控制台窗口关闭得非常快。在这种情况下,在printf语句之后,您可以连续放置两个getchar以产生延迟。 - Vlad from Moscow

2

试试这样:

#include <stdio.h>

int main(void)
{
    int c;
    long nc = 0;

    while ( ( c = getchar() ) != EOF && c != '\n' ) 
    ++nc;

    printf( "%ld\n", nc );
}

这行代码:'while ( ( c = getchar() ) != EOF || c != '\n' ) '会一直停留在循环中,因为'c'不能同时是EOF和'\n'。建议修改为:'while ( ( c = getchar() ) != EOF && c != '\n' ) '。 - user3629249

2
while (getchar() != '\n')
   ++nc;
printf("%ld \n",nc);

工作了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接