标题:这个程序结果为什么会这样呢?用竖向直方图要怎样显示?
只看楼主
素履。
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-3
结帖率:0
已结贴  问题点数:20 回复次数:5 
这个程序结果为什么会这样呢?用竖向直方图要怎样显示?
题目是读取一篇英文文章,统计不同长度单词的个数,并用竖向直方图表示出来。目前我只做了统计部分,但是却出现了问题。读取的文本是有内容的,但是最后显示的都是0个。。T_T希望高手们可以指点下,新手感激不尽~~
源程序如下: #include<stdio.h>
#include<conio.h>
#include<string.h>
main()
{
    FILE *fp;
    char ch='0',name[50],*filename=name;
    int len=0,i=0,j=0;
    int count[11]={0,0,0,0,0,0,0,0,0,0,0};                 //用于存放相同长度单词的个数
    printf("请输入文章地址:\n");                           //输入需要统计的文章地址,如"F:\shujiachengxu\text\ceshi.txt"
    gets(name);                                            //得到地址
    printf("正在扫描文章,请等待片刻……\n");              //提示语句
    fp=fopen(filename,"r");                                   //打开文件
    ch=fgetc(fp);                                          //逐字符对文件进行读取
    if (fp==NULL)
        printf("File open error\n");
    else
    {
        while(!feof(fp))
        {
            if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch='-')||(ch='\''))
            {
                if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
                    j++;
                else
                    ;
            }
            else
            {
                if(j<=10)
                    len=j;
                else
                    len=11;
                count[len-1]=count[len-1]+1;
            }
            ch=fgetc(fp);
        }
    }
    fclose(fp);
    for(i=0;i<10;i++)
        printf("单词长度为%d的单词有%d个\n",i+1,count[i]);
    printf("单词长度大于10的单词有%d个\n",count[10]);
}  
 
再发一遍,不知道会不会违规。。。T_T但是。。刚才那个帖子忘了弄分数了。。求版主谅解。。女生不该当程序猿的。更何况是个渣渣。。T_T
搜索更多相关主题的帖子: 直方图 count include 源程序 英文文章 
2013-07-09 08:01
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:10 
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch='-')||(ch='\''))  是否打少一个等号了?

我行我乐
我的博客:
http://blog.yuccn. net
2013-07-09 08:15
素履。
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-3
得分:0 
回复 2楼 yuccn
嗯嗯。是的是的。不过结果显示出来还是错误的啊。我读取的文本内容是“a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa aaaaaaaaaaa”,结果显示只有单词长度是1、3、6、10的分别有一个单词,大于10的有7个单词。。这是怎么回事??
2013-07-09 08:23
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
得分:10 

在改过等号后,需要改动一下那个j,判断一个单词后j是从头开始的,你没有清零。
程序代码:
while(!feof(fp))
         {
             if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')||(ch=='-')||(ch=='\''))
             {
                 if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
                     j++;
                 else
                     ;
             }
             else
             {
                 if(j<=10)
                     len=j;
                 else
                     len=11;
                 count[len-1]=count[len-1]+1;
                 j=0;//这里需要清零,开始下一个单词的统计
             }
             ch=fgetc(fp);
         } 


 

Edsger Dijkstra:算法+数据结构=程序
2013-07-09 08:50
素履。
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-7-3
得分:0 
回复 4楼 雪狼MJ
是的是的~~~!感谢您~~~

我突然想到一个问题,英文文章开头会有空格,然后按照我这个读出来的话,一开始j是被赋值为0的,那直接执行30行的语句,这个时候就出现count[-1]的情况,这个会有影响吗?要如何解决呢?
2013-07-09 09:05
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
得分:0 

对啊,说不定文件哪里输入失误多输入了一个空格呢?

你程序对这些问题都没有解决的,这是漏洞。

你先想想解决的办法。

Edsger Dijkstra:算法+数据结构=程序
2013-07-09 09:20



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




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

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