c - K&R 第 1.5.4 章:“你将如何测试字数统计程序?”
问题描述
初学者在这里。
在 K&R 的 ANSI C 教科书第 20 页中,他们问:您将如何测试字数统计程序?
我使用 CodeBlocks IDE 控制台应用程序完全从教科书中复制。我在网上看到了很多很棒的输入测试,但我的问题更愚蠢。我如何实际输入一些东西?当我按下回车时没有任何反应。我有这个问题是因为我使用的是 IDE,因此没有学习如何正确运行 C 程序吗?提前致谢。我添加了一张图片来告诉你我的意思
这是代码:
#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* counts lines, words and characters as input */
main()
{
int c, nl, nw, nc, state;
state = OUT;
/* set these three constants to 0: */
nl = nw = nc = 0;
while ((c = getchar()) != EOF){
++nc;
if (c == '\n')
++nl;
/* || == OR (&& == AND)
evaluation of the following line
will stop as soon as the truth or
falsehood is known, so the order matters */
if (c == ' ' || c == '\n' == c == '\t')
state = OUT;
else if (state == OUT){
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
解决方案
K&R 第 2 版中的单词计数程序是在您以某种方式发出输入结束信号的环境中运行的。通常,由于他们一直使用 UNIX,因此他们使用 Ctrl-D 序列(如果您在 Linux 或任何类 Unix 操作系统中运行程序,则该序列有效)从 UNIX 系统早期开始就一直如此。
Windows 通过输入 Ctrl-Z(可能后跟键盘返回键)表示控制台应用程序中的输入结束
如果您重定向来自文件的输入(如您所说a.out <my_input_file.txt
的),当文件中没有更多输入时,您将在末尾获得单词数。
您正在 IDE 中运行程序,这通常会隐藏您的标准输入和标准输出所在的位置,或者如何向您显示的窗口发出信号,说明程序没有更多输入。
要使程序结束,您首先必须知道如何结束输入。