Exercise 1-11. How would you test the word count program? What kinds of input are most likely to uncover bugs if there are any?
这里作者问我们如何测试课文中的(伪)单词计数的例子。笔者认为最好的办法是将想要测试的文本全部写在一个文本文档中,让后运行程序时将输入流用 < 控制符切换成从文档中读取输入,这样我们可以直接看到结果,不用一个个敲键盘输入字符然后用 control + d 输入 EOF 再观察结果。当然了,也可以用各种代码文件来进行测试。也就是推荐用下面的方法。
> ./WordCount < WordCount.c
这里笔者直接用代码文件来进行测试。大家也可以尝试用各种其他文本文件。尝试用以下种类的输出来判断程序是否有 bug :
- 一行文本/多行文本/直接换行的文本
- 以一个空白符开头/以多个空白符开头/以非空白符开头
- (伪)单词之间有一个空白符/多个空白符
很遗憾,笔者没有什么好的办法来发现代码中的错误。大概是这个程序本身就没有什么 bug 吧。如果大家发现了有什么 bug ,欢迎评论 or 私信指出!
程序代码如下:
#include <stdio.h>
#define IN 1
#define OUT 0
/* count lines, words, and characters in input */
int main(void) {
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c =='\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
return 0;
}
做了一点点修正,用了标准的 main() 函数写法。