【问题标题】:Character Counter from "The C Programming Language" Not Working As I Expected“C 编程语言”中的字符计数器未按预期工作
【发布时间】:2012-08-26 23:36:00
【问题描述】:

我正在阅读“C 编程语言”,并使用 CodeBlocks 完成所有练习。但是我无法让我的角色计数器起作用,尽管它是直接从书中复制的。代码如下所示:

#include <stdio.h>

main(){
    long nc;

    nc = 0;

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

当我运行该程序时,它会打开一个窗口,我可以输入,但是当我按下 Enter 键时,它会跳过一行,我可以继续输入,但我认为它应该打印字符数。

知道出了什么问题吗?

【问题讨论】:

    标签: c character


    【解决方案1】:

    这一行:

    while (getchar() != EOF)
    

    表示它一直读取到输入结束 - 不是 直到一行结束。 (EOF 是一个特殊的常量,意思是“文件结束”。)您需要结束输入(可能使用 Ctrl-D 或 Ctrl-Z)才能查看输入的字符总数。

    【讨论】:

      【解决方案2】:

      如果要在 EOL(行尾)处终止,请将 EOF 替换为 '\n':

      #include <stdio.h>
      
      main(){
          long nc;
      
          nc = 0;
      
          while (getchar() != '\n')
              ++nc;
          printf("%ld\n", nc);
      }
      

      【讨论】:

        【解决方案3】:

        Enter 不是 EOF。根据您的操作系统,Ctrl-D 或 Ctrl-Z 应该在标准输入上充当 EOF。

        【讨论】:

        • 好的,这是有道理的。但是 Ctrl-D 和 Ctrl-Z 都不起作用。他们分别输入 ^D 和 ^Z。它可能是什么,或者在某个地方找出它是什么?
        • @user1624005:您可能需要按 Ctrl-Z,然后按 Enter。
        【解决方案4】:

        我今晚也遇到了问题。最后发现Linux上的Ctrl-D有效。您使用 cc 构建源文件,然后启动程序并输入一个单词,然后在完成输入后按两次 Ctrl-D。程序计数的数字将打印在您刚刚输入的单词后面,程序立即终止。就像这样:

        【讨论】:

          【解决方案5】:

          nujabse 提供的上述答案是正确的。但是最近自己遇到了这个问题并研究了答案,我想补充一下原因。

          使用 Ctrl+C 告诉终端向当前前台进程发送一个 SIGINT,默认情况下这意味着终止应用程序。

          Ctrl+D 告诉终端它应该在标准输入上注册一个 EOF,bash 将其解释为想要退出。

          What's the difference between ^C and ^D

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-22
            • 1970-01-01
            • 2019-01-06
            • 1970-01-01
            相关资源
            最近更新 更多