在 K& R 上,建议使用以下代码来计算输入中的单词,行和字符。练习1.11问:
您如何测试字数统计程序?什么样的输入 如果有错误,最有可能发现错误吗?
我看到这些问题的唯一答案是在包含多行,单词和制表符的输入上测试代码。
你能看到任何其他方法来测试这段代码吗?
#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words and characters in input */
main(){
int c, n1, nw, nc, state;
state = OUT;
n1 = nw = nc = 0;
while ((c = getchar()) != EOF){
++nc;
if (c == '\n')
++n1;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT){
state = IN;
++ nw;
}
}
printf("%d %d %d\n",n1,nw,nc);
}
答案 0 :(得分:2)
问题背后的想法是说明“白盒子”测试的概念。查看程序中的每个“选择点”,看看如何运用它背后的逻辑来揭示“极端情况”:
while
循环,请输入没有数据的输入(即EOF
即将出现)\n
之前没有EOF
来执行行计数if
\n
的文件,并查看最后一个单词是否被计算IN
和OUT
之间切换的逻辑答案 1 :(得分:2)
使用以下所有类型的输入测试程序:
使用一个字符单词和长单词测试程序,包括带有这些输入的带连字符的单词:
此外:
printf
的调试文件。确保测试导致到达所有printf语句。换句话说,代码的任何部分都不应该在测试结束时保持未使用状态。wc
程序的输出不匹配。