9

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

#include <stdio.h>

main(){
    long nc;

    nc = 0;

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

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

知道出了什么问题吗?

4

5 回答 5

9

这一行:

while (getchar() != EOF)

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

于 2012-08-26T23:43:20.733 回答
3

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

#include <stdio.h>

main(){
    long nc;

    nc = 0;

    while (getchar() != '\n')
        ++nc;
    printf("%ld\n", nc);
}
于 2012-08-26T23:46:08.230 回答
2

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

于 2012-08-26T23:43:40.410 回答
0

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

于 2016-05-15T14:39:17.530 回答
0

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

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

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

^C 和 ^D 有什么区别

于 2020-11-03T05:35:20.340 回答