《C程序设计语言》第二版 Exercise1-11

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 :

  1. 一行文本/多行文本/直接换行的文本
  2. 以一个空白符开头/以多个空白符开头/以非空白符开头
  3. (伪)单词之间有一个空白符/多个空白符

很遗憾,笔者没有什么好的办法来发现代码中的错误。大概是这个程序本身就没有什么 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() 函数写法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值