按Enter键时,从控制台读取不会停止

Tom*_*tor 1 c

我正在读PrenticeHall.C编程语言 - 第二版Ed.Kernighan,Ritchie.

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

#include <stdio.h>

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

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

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

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

#include <stdio.h>

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

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

有关如何使这件事有用的任何想法?

PS我正在使用Windows操作系统.(仍然)

unk*_*ulu 6

原因是代码尝试读取所有输入,直到文件结束.如果这个程序是从一个文件读取的,它会知道它何时结束,但是因为它是从控制台读取的,你必须明确地告诉它输入结束了.在Linux上,您可以通过^D在Windows上按(Ctrl + D)^Z(Ctrl + Z)来完成此操作.

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

我正在读PrenticeHall.Ansi C编程语言 - 第二版Ed.Kernighan,Ritchie.

那是你读的一本非常好的书.这很好,我想,它包含了你的问题的答案.


Lev*_*von 5

您的两个程序都可以正常工作,您只需EOF按照我在问题下方的第一条评论中的说明输入即可.那就是^DLinux下的(Control-D)和^ZWindows下的(Control-Z).

请注意循环中的两个条件都在查找EOF不是或要终止的其他输入.提供此输入后,循环终止并显示计数.