标题:[求助] 此程序有一个BUG-特请教
只看楼主
hongsediguo
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-6-29
 问题点数:0 回复次数:1 
[求助] 此程序有一个BUG-特请教

程序要求:编写程序,打印输入单词长度的垂直方向的直方图(大概形状请看最下面).
注:此题出自<<C程序设计语言(第2版.新版)>>之练习1-13.

下面的程序有一个BUG.当我多次输入' '或'\n'或'\t'时,这些控制符前面的单词长度line[i](详见程序中)就成了0.查看函数 countAndLengthOfWords(int line[],int lim) 多次未果.联系其他函数,包括主函数仍未果 .

    特次请教各位大虾!!!
谢谢!!!



#include<stdio.h>
#define MAXMUBER 1000

int countAndLengthOfWords(int line[],int lim);
int maxLen(int line[],int lim,int & nw);

int main()
{
int line[MAXMUBER];
int max;
int nw;
int i;
int keep;
max=maxLen(line,MAXMUBER,nw);
keep=max;

printf("---打印输入中单词长度的垂直方向的直方图---\n\n\n\n");


while(max>0){
for(i=0;i<nw;i++)
if(line[i]/max)
printf(" *");
else
printf(" ");
if(i==nw)
putchar('\n');
max--;
}

for(i=0;i<nw;i++)
printf("%3d",i+1);
if(i=nw)
putchar('\n');

for(i=0;i<nw;i++)
printf("%3d",line[i]);
if(i=nw)
putchar('\n');

printf(" %d %d ",nw,keep);

return 0;
}

int maxLen(int line[],int lim,int &nw)
{

int max=0;
int i;

if((nw=countAndLengthOfWords(line,lim ))>0){
for(i=0;i<nw;i++)
if(line[i]>max)
max=line[i];
}
return max;
}

#define IN 1
#define OUT 0
int countAndLengthOfWords(int line[],int lim)
{
int c,nw,len,state;

state=OUT;
nw=len=0;
while((c=getchar())!=EOF&&nw<=lim) {
if(c==' '||c=='\n'||c=='\t'){
if(state=IN){
line[nw-1]=len;
len=0;
}
state=OUT;
}
else {
len++;
if(state==OUT) {

state=IN;
++nw;
}
}
}
return nw;
}

执行:

#include<stdio.h>
#define MAXMUBER 1000

int countAndLengthOfWords(int line[],int lim);
int maxLen(int line[],int lim,int & nw);

int main()
{
int line[MAXMUBER];
int max;
int nw;
int i;
int keep;
max=maxLen(line,MAXMUBER,nw);
keep=max;

printf("---打印输入中单词长度的垂直方向的直方图---\n\n\n\n");


while(max>0){
for(i=0;i<nw;i++)
if(line[i]/max)
printf(" *");
else
printf(" ");
if(i==nw)
putchar('\n');
max--;
}

for(i=0;i<nw;i++)
printf("%3d",i+1);
if(i=nw)
putchar('\n');

for(i=0;i<nw;i++)
printf("%3d",line[i]);
if(i=nw)
putchar('\n');

printf(" %d %d ",nw,keep);

return 0;
}

int maxLen(int line[],int lim,int &nw)
{

int max=0;
int i;

if((nw=countAndLengthOfWords(line,lim ))>0){
for(i=0;i<nw;i++)
if(line[i]>max)
max=line[i];
}
return max;
}

#define IN 1
#define OUT 0
int countAndLengthOfWords(int line[],int lim)
{
int c,nw,len,state;

state=OUT;
nw=len=0;
while((c=getchar())!=EOF&&nw<=lim) {
if(c==' '||c=='\n'||c=='\t'){
if(state=IN){
line[nw-1]=len;
len=0;
}
state=OUT;
}
else {
len++;
if(state==OUT) {

state=IN;
++nw;
}
}
}
return nw;
}

#include<stdio.h>
#define MAXMUBER 1000

int countAndLengthOfWords(int line[],int lim);
int maxLen(int line[],int lim,int & nw);

int main()
{
int line[MAXMUBER];
int max;
int nw;
int i;
int keep;
max=maxLen(line,MAXMUBER,nw);
keep=max;

printf("---打印输入中单词长度的垂直方向的直方图---\n\n\n\n");


while(max>0){
for(i=0;i<nw;i++)
if(line[i]/max)
printf(" *");
else
printf(" ");
if(i==nw)
putchar('\n');
max--;
}

for(i=0;i<nw;i++)
printf("%3d",i+1);
if(i=nw)
putchar('\n');

for(i=0;i<nw;i++)
printf("%3d",line[i]);
if(i=nw)
putchar('\n');

printf(" %d %d ",nw,keep);

return 0;
}

int maxLen(int line[],int lim,int &nw)
{

int max=0;
int i;

if((nw=countAndLengthOfWords(line,lim ))>0){
for(i=0;i<nw;i++)
if(line[i]>max)
max=line[i];
}
return max;
}

#define IN 1
#define OUT 0
int countAndLengthOfWords(int line[],int lim)
{
int c,nw,len,state;

state=OUT;
nw=len=0;
while((c=getchar())!=EOF&&nw<=lim) {
if(c==' '||c=='\n'||c=='\t'){
if(state=IN){
line[nw-1]=len;
len=0;
}
state=OUT;
}
else {
len++;
if(state==OUT) {

state=IN;
++nw;
}
}
}
return nw;
}

执行:
sadfsadfsajdfjsadklfjsadkl kjsdaf ksadjfklsadjfklsadjf kasdjfjskaldfj sdajkf


sadf
dsjf
fj jjdf fj jfds fjd fjs

fsdj


jfa


^Z
---打印输入中单词长度的垂直方向的直方图---

*
*
*
*
*
*
*
*
*
*
*
*
* *
* *
* *
* *
* *
* *
* *
* *
* * *
* * *
* * *
* * *
* * *
* * *
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
26 6 0 14 0 0 0 0 0 0 0 0 0 0 0
15 26 Press any key to continue

错处:lin[4...14]=0,显然不合理.

搜索更多相关主题的帖子: BUG int line 
2007-06-29 10:36
allen303alle
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-6-27
得分:0 

……下次有时间了帮你看下吧
顶起~~


未贏其財,先贏其勢;獅子搏兔,君臨天下 ...................遇強即屈,借花敬佛。
2007-06-29 11:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-151247-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.095132 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved