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

时间:2015-06-05 07:18:19

标签: c while-loop eof

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

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

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

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

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

4 个答案:

答案 0 :(得分:7)

  

此程序不会打印字符

不会。您没有向 print 添加任何语句。

  

我发现我陷入无限循环

如果您没有点击 条件,那么您将处于循环中。您需要让EOF退出循环。使用

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

现在,解决方案:

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

  2. 您要么提供EOF,要么将while()的中断条件更改为必要无限循环。

  3. 除编码问题外,您还需要考虑逻辑。在目前的代码形式中,getchar()也将换行符\n)计为有效字符。要解释一下

    形式的输入
      

    $ ./a.out ENTER
      一个输入
      小号输入
      d 输入
      ˚F输入
      克输入
       CTRL + d

    会产生结果

      

    10

    我们通常称之为计算字符。您可能也想查看这部分逻辑。

    尽管如此,main()的推荐签名是int main(void)

答案 1 :(得分: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键。

答案 2 :(得分:2)

试试这样:

#include <stdio.h>

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

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

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

答案 3 :(得分:2)

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

工作!