在看TCPL,其中有道绘制单词长度分布直方图的习题参考答案给的是
#include <stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
int main()
{
int c, i, nc, len, state, maxvalue, ovflow, wl[MAXWORD];
state = OUT;
nc = 0;
ovflow = 0;
for (i = 0; i < MAXWORD; i++)
wl[i] = 0;
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t')
{
state = OUT;
if (nc > 0)
if (nc < MAXWORD)
wl[nc]++;
else
ovflow++;
nc = 0;
}
else if (state = OUT)
{ state = IN;
nc = 1;
}
else
nc++;
}
maxvalue = 0;
for (i = 1; i < MAXHIST; i++)
if (wl[i] > maxvalue)
maxvalue = wl[i];
for (i = 1; i < MAXWORD; i++)
{
printf("%5d - %5d : ", i, wl[i]);
if (wl[i] > 0)
{
if ((len = wl[i] * MAXWORD / maxvalue) <= 0)
len = 1;
}
else
len = 0;
while (len > 0)
{
putchar('*');
len--;
}
putchar('\n');
}
if (ovflow > 0)
printf("There are %d words >= %d\n", ovflow, MAXWORD);
return 0;
}
这里有一段
if (wl[i] > 0)
{
if ((len = wl[i] * MAXWORD / maxvalue) <= 0)
len = 1;
}
else
len = 0;
没看懂啥意思,既然wl[i] > 0, MAXWORD = 15, maxvalve也大于0,那len怎么会<= 0 呢?
我用下面这句替换掉它,测试了一下结果好像是一样的
len = wl[i] * MAXWORD / maxvalue
所以答案里那一串是干什么用的啊?