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

bil*_*lcy 3 c while-loop eof

我写了一个简单的c程序来计算字符数

#include <stdio.h>
main()
{
    long nc;
    nc = 0;

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

    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

这个程序不打印我的字符.在测试不同的情况时,我发现我陷入无限while()循环.

Sou*_*osh 7

这个程序不打印我的字符

它不会.您没有添加任何语句来打印它们.

我发现我陷入无限循环

如果不分断条件,你就可以在回路中.你需要EOF退出循环.使用

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

现在,解决方案:

  1. getchar()不会打印值.您必须存储值并明确打印(如果您愿意)使用,也许putchar().

  2. EOF否则你要么提供或改变while()基本无限循环中出来的破坏条件.


除了编码问题,你还需要考虑逻辑.在目前的代码形式中,也getchar()newline(\n)计为有效字符.解释一下,输入的形式

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

会产生结果

10

但这不是我们通常称之为角色的东西.您也可以查看逻辑的这一部分.

也就是说,推荐的签名main()int main(void).


Vla*_*cow 5

请尝试以下方法

#include <stdio.h>

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

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

    printf( "%ld\n", nc );
}
Run Code Online (Sandbox Code Playgroud)

您必须生成EOF状态(在UNIX系统中为Ctrl + d或在Windows中为CTRL + z)或只需按Enter键.