请教一道C语言编程题

题目如下:1、单词统计【问题描述】统计某篇英文小说中某些单词的出现次数。【实现提示】英文小说存储在一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一... 题目如下:
1、单词统计
【问题描述】统计某篇英文小说中某些单词的出现次数。
【实现提示】英文小说存储在一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后全部完成。输出的每个单词的出现次数。约定小说中的词汇一律不跨行,这样每从文本文件中读入一行,就统计每个单词在这行中出现的次数,直到文件结束。
要求在程序运行时才输入文本文件名和要统计的词汇。
我的C语言代码是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{ FILE *fp;
char ch,filename[10],word[20],a[10][20];
int count[10]={0},i,j;
printf("请输入文件名:");
scanf("%s",filename);
printf("请输入要搜索的单词\n");
i=0;
do{scanf("%s",a[i]);}
while(a[i++][0]!='0');
if((fp=fopen(filename,"r"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
ch=fgetc(fp);
while(feof(fp)!=1)
{
while(ch!='\n')
{ i=0;
while(ch!=' ')
{
word[i]=ch;
ch=fgetc(fp);
i++;
}
word[i]='\0';
for(j=0;j<10&&a[j][0]!='0';j++)
if(strcmp(word,a[j])==0)
count[j]++;
ch=fgetc(fp);

}
for(i=0;i<10&&a[i][0]!='0';i++)
printf("%s出现的次数为%d\n",a[i],count[i]);
}
}
另外一个模拟小说的文本文件里没有什么问题,执行这个代码,输入文本文件名和要搜索的单词,加0表示结束语后,就提示出错了,编译没有问题,应该怎么改啊?求大神帮忙啊。。。答的好的加分!
展开
 我来答
百度网友c0588c1
推荐于2016-05-09 · TA获得超过522个赞
知道小有建树答主
回答量:138
采纳率:0%
帮助的人:61.6万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
    FILE *fp;
    char ch,filename[10],word[20],a[10][20];
    int count[10]={0},i,j;
    printf("请输入文件名:");
    scanf("%s",filename);
    printf("请输入要搜索的单词\n");
    i=0;
    do
    {
        scanf("%s",a[i]);
    } while(a[i++][0]!='0');
    printf("dir\n");
    if((fp=fopen(filename,"r"))==NULL)
    {
        printf("无法打开此文件\n");
        exit(0);
    }
    ch=fgetc(fp);
    while(feof(fp)!=1&&ch!=EOF)
    {
        while(ch!=EOF)
        {
            i=0;
            while(ch!=' '&&ch!=EOF)
            {
                word[i]=ch;
                ch=fgetc(fp);
                i++;
            }
            word[i]='\0';
            for(j=0;j<10&&a[j][0]!='0';j++)
            if(strcmp(word,a[j])==0)
                count[j]++;
                ch=fgetc(fp);
        }
        for(i=0;i<10&&a[i][0]!='0';i++)
            printf("%s出现的次数为%d\n",a[i],count[i]);
    }
    fclose(fp);
}

修改了几处地方 你再试试^_^

更多追问追答
追问

还是有问题哎。。。。

追答

额。。我这里运行良好  可能还有bug。


不过  你是不没按套路出牌哈 ,题目要求被统计的文章是不换行的,有换行的话这个有问题


百度网友3bc3634
2013-06-26 · TA获得超过3229个赞
知道小有建树答主
回答量:1015
采纳率:50%
帮助的人:529万
展开全部
给 a[10][20] 赋值的那一段, while 条件判断的时候, 写成a[++i][0]!='0' (而不是 a[i++][0]!='0'),起码不会出现段错误!

当然,你的程序还有其他问题。再改改!
追问
貌似不对啊大哥。。。照你这样改过后之后,输入0都没有结束,我觉得就应该是i++,先判断a[i][0]是不是等于0,再执行i的++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式