5

在第 2 版的第 1.5.2 节中。K&R 介绍了 getchar() 和 putchar() 并给出了一个字符计数的例子,然后是行计数,以及整章的其他内容。

这是字符计数程序

#include <stdio.h>
main() {

long nc;

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

输入应该从哪里来?在终端命令窗口中输入并按回车键适用于文件复制程序,但不适用于此程序。我正在为 Mac 使用 XCode。

似乎最简单的方法是使用路径“pathway/folder/read.txt”读取文本文件,但我也遇到了麻烦。

4

2 回答 2

8

在交互式命令行中,在换行符后按 ctrl-D 或在换行符后按两次 ctrl-D以终止输入。然后程序将看到 EOF 并向您显示结果。

要通过路径传递文件并避免交互部分,请使用<shell 的重定向运算符./count_characters < path/to/file.txt.

于 2013-06-25T23:42:09.027 回答
0

标准 C 输入函数仅在您按 Enter 键 IOW 时开始处理您输入的内容。您按的每个键都会向系统缓冲区(shell)添加一个字符。然后当行完成时(即按 Enter),这些字符被移动到 C 标准缓冲区。getchar()读取缓冲区中的第一个字符,这也将其从缓冲区中删除。每次连续调用getchar()读取并删除下一个字符,依此类推。如果您没有读取输入到键盘缓冲区中的每个字符,而是输入另一行文本,那么下一次调用getchar()之后将继续读取上一行剩余的字符;您通常会在程序通过您的第二个输入时看到这一点。顺便说一句,回车键的换行符也是一个字符,也存储在键盘缓冲区中,所以如果你有新的输入要读入,你首先需要清除键盘缓冲区。

于 2013-06-26T00:15:56.760 回答