【问题标题】:Reading from console doesn't stop when I press Enter当我按 Enter 时,从控制台读取不会停止
【发布时间】:2012-06-22 11:50:55
【问题描述】:

我正在阅读 PrenticeHall。 The C Programming Language - 第二版.Kernighan,Ritchie。

在本书(pg-20)中,给出了一个程序示例,它应该打印用户在控制台窗口中键入的字符数,这是它的代码。

#include <stdio.h>

main()
{
    double nc;
    for (nc = 0; getchar() != EOF; ++nc)
        ;

    printf("%.0f\n", nc);
}

但是当我运行它并在控制台中输入一些东西时,它根本不会打印任何东西,光标会一直闪烁。 这正是那本书中编写代码的方式。

我也尝试过另一种方式,但这也没有成功,结果与之前的代码相同。

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    while (getchar() != EOF)
            ++nc;

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

关于如何使这件事发挥作用的任何想法?

附: 我正在使用 Windows 操作系统。 (仍然)

【问题讨论】:

  • 如何结束程序?什么操作系统..你在Linux/Unix和Windows下分别输入^D还是^Z?
  • 感谢@hmjd using getchar() != '\n' 与回车键配合使用,
  • @SauravTomar,它仍然适用于EOF,只是需要一些了解。
  • @unkulunkulu 它与 EOF 合作,现在我知道为什么它没有更早地工作。 :-)

标签: c


【解决方案1】:

原因是代码试图读取所有输入直到文件结束。如果这个程序正在从文件中读取,它会知道它什么时候结束,但是由于它是从控制台读取的,所以你必须明确告诉它输入已经结束。在 Linux 上,您可以通过按 ^D (Ctrl+D) 来执行此操作,在 Windows 上按 ^Z (Ctrl+Z)。

请注意,它必须在新行的开头完成,即按Enter 后,按^D(Win 上为^Z)。

我正在阅读 PrenticeHall。 Ansi C 编程语言 - 第 2 名 Ed.Kernighan,里奇。

您正在阅读的那本书非常好。太好了,我想,它包含了您问题的答案。

【讨论】:

    【解决方案2】:

    您的两个程序都可以工作,您只需要输入EOF,正如我在您问题下方的第一条评论中指出的那样。即Linux下的^D(Control-D)和Windows下的^Z(Control-Z)。

    注意循环中的两个条件都在寻找EOF not 或其他要终止的输入。提供此输入后,循环将终止并显示您的计数。

    【讨论】:

      【解决方案3】:

      您应该停止输入“EOF”字符(在 GNU/Linux 上为 Ctrl+D)。

      【讨论】:

        【解决方案4】:

        我的编译器 (GCC 4.4) 对您发布的代码提出质疑。这消除了狡辩:

        #include <stdio.h>
        
        int main()
        {
            int nc;
            for (nc = 0; getchar() != EOF; ++nc)
                ;
            printf("%d\n", nc);
            return 0;
        }
        

        但其他答案是正确的:您必须使用 Ctrl-D 或 -Z 结束键盘输入。

        我不确定为什么 Kernighan 和 Ritchie 在这种情况下会使用 double,顺便说一句。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-17
          • 1970-01-01
          • 2011-09-11
          • 1970-01-01
          相关资源
          最近更新 更多