关于EOF和回车符的问题.
这是一个打印输入单词长度的垂直方向直方图.其它运行都正常.现在有两个问题请教各位:
1,当什么都不输入直接用F6输入结束符然后敲回车符,结果竟然是程序出错中止了
2,输入一段单词后直接敲回车,或者敲F6再敲回车,都不会使程序开始运行.而当敲完回车符再敲F6再敲回车,程序才开始运行.
我用的VC6.0
盼回复,谢谢.
#include <stdio.h>
#define MAXHIST 15 /* max length of histogram*/
#define MAXWORD 11 /* max length of a word*/
#define IN 1 /* inside word*/
#define OUT 0 /* outside a word*/
/* print horizontal histogram */
main()
{
int c,i,j,nc,state;
int len;/*length of each bar */
int maxvalue;/* maximum value for wl[]*/
int ovflow;/* number of overflow words */
int wl[MAXWORD]; /* word length counters */
state = OUT;
nc = 0;/* number of chars in a word*/
ovflow = 0; /* number of words>=MAXWORD*/
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; /* beginning a new word*/
} else
++nc; /* inside a word*/
}
maxvalue = 0;
for (i = 1; i < MAXWORD; i++)
if (wl[i] > maxvalue)
maxvalue = wl[i];
for (i = MAXHIST; i > 0; --i) {
for (j = 1; j < MAXWORD; ++j)
if (wl[j] * MAXHIST / maxvalue >= i)
printf (" *");
else
printf (" ");
putchar('\n');
}
for (i = 1; i < MAXWORD; ++i)
printf("%3d",i);
putchar('\n');
for (i = 1; i < MAXWORD; ++i)
printf("%3d", wl[i]);
putchar('\n');
if (ovflow > 0)
printf("There are %d words >= %d\n",ovflow,MAXWORD);
}
[解决办法]
你的程序到了if (wl[j] * MAXHIST / maxvalue > = i)
这里明明maxvalue 就是0啊, 所以会有异常抛出.