达内云笔记项目介绍:请问我下面的C代码出现什么问题了?第1步和第5步都不正常了,顺便可否教我改一下

来源:百度文库 编辑:中科新闻网 时间:2024/05/09 16:19:11
#include "stdio.h"
#include <stdlib.h>

void main()
{
FILE *f;
char a[50],ch;
int i,flag,num,n=1;
long letter=0,let,word=0;
f=NULL;
main: printf("\t\t英文文章统计程序\n(1)打开文件,载入英文文章\n(2)统计文章中英文的单词数\n(3)统计文章中标点符号数目\n(4)统计文章的句子数目\n(5)统计文章各英文字母出现的频率\n(6)查询文章某个单词出现的次数\n(7)退出\n请键入相应操作的编号:"); /*主界面*/
scanf("%d",&i);

if(i==1) /*打开文章*/
{
first: printf("请输入你要打开的文章:");
getchar();
gets(a);
if((f=fopen(a,"r"))!=NULL)
{
system("CLS");
printf("文章读取成功,请继续进行操作\n");
goto main;
}
else
{
printf("请输入正确的文件名,以便进行操作:\n");
goto first;
}
}

if(i==2) /*统计英语单词数*/
{
flag=0;
num=0;
if(f!=NULL)
{
while((ch=fgetc(f))!=EOF)
{
if(ch==' '||ch=='!'||ch=='?')num++;
}
printf("该文档一共有%d个英语单词\n",num);
}
else
{
printf("请先进行操作1\n");
goto first;
}
}

if(i==3) /*统计标点符号数*/
{
if(f!=NULL)
{
flag=0;
num=0;
while((ch=fgetc(f))!=EOF)
{
if(ch=='/'||ch==','||ch=='!'||ch=='?'||ch==';'||ch==':'||ch=='('||ch=='['||ch=='--'||ch=='…'||ch=='.')num++;
}
printf("该文档一共有%d个标点符号\n",num);
}
else
{
printf("请先进行操作1\n");
goto first;
}
}

if(i==4) /*统计句子数*/
{
if(f!=NULL)
{
flag=0;
num=0;
while((ch=fgetc(f))!=EOF)
{
if(ch=='!'||ch=='?'||ch=='.')num++;
}
printf("该文档一共有%d个句子\n",num);
}
else
{
printf("请先进行操作1\n");
goto first;
}
}

if(i==5) /*统计各字母频率*/
{
printf("各字母在文章中出现的频率:(出现频率=该字母出现的次数/总字母数)\n");
while((ch=fgetc(f))!=EOF)
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')letter++;
}
printf("%ld\n",letter);
for(i=65;i<=90;i++)
{
while(ch!=EOF)
{
if(ch=i)let++;
}
(int)let=let/letter;
printf("%c:%d% ",i,let);
let=0;
if((i+1)%5==0)
printf("\n");
}
}
}

第一步出现的问题是如果我第一次输入的文件名有错误,那么无论我以后怎么输入都不能正常运行下面的步骤;第五步不能正常统计大写字母在文章中出现的频率
可否让小写字母的统计也出来呢?

#include "stdio.h"
#include <stdlib.h>

void main()
{
FILE *f;
char a[50],ch;
int temp[27]={0};
int i,flag,num,n=1;
long letter=0,word=0;
f=NULL;
main: printf("\t\t英文文章统计程序\n(1)打开文件,载入英文文章\n(2)统计文章中英文的单词数\n(3)统计文章中标点符号数目\n(4)统计文章的句子数目\n(5)统计文章各英文字母出现的频率\n(6)查询文章某个单词出现的次数\n(7)退出\n请键入相应操作的编号:"); /*主界面*/
scanf("%d",&i);
getchar();
if(i==1) /*打开文章*/
{
first: printf("请输入你要打开的文章:");
//getchar();
gets(a);
if((f=fopen(a,"r"))!=NULL)
{
system("CLS");
printf("文章读取成功,请继续进行操作\n");
goto main;
}
else
{
printf("请输入正确的文件名,以便进行操作:\n");
goto first;
}
}

if(i==2) /*统计英语单词数*/
{
flag=0;
num=0;
if(f!=NULL)
{
while((ch=fgetc(f))!=EOF)
{
if(ch==' '||ch=='!'||ch=='?')num++;
}
printf("该文档一共有%d个英语单词\n",num);
}
else
{
printf("请先进行操作1\n");
goto first;
}
}

if(i==3) /*统计标点符号数*/
{
if(f!=NULL)
{
flag=0;
num=0;
while((ch=fgetc(f))!=EOF)
{
if(ch=='/'||ch==','||ch=='!'||ch=='?'||ch==';'||ch==':'||ch=='('||ch=='['||ch=='--'||ch=='…'||ch=='.')num++;
}
printf("该文档一共有%d个标点符号\n",num);
}
else
{
printf("请先进行操作1\n");
goto first;
}
}

if(i==4) /*统计句子数*/
{
if(f!=NULL)
{
flag=0;
num=0;
while((ch=fgetc(f))!=EOF)
{
if(ch=='!'||ch=='?'||ch=='.')num++;
}
printf("该文档一共有%d个句子\n",num);
}
else
{
printf("请先进行操作1\n");
goto first;
}
}

if(i==5) /*统计各字母频率*/
{
printf("各字母在文章中出现的频率:(出现频率=该字母出现的次数/总字母数)\n");
while((ch=fgetc(f))!=EOF)
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
{
for(i=65;i<=90;i++)
{
if(ch==i)
{
temp[i-65]++;
letter++;
break;
}
}
for(i=97;i<=122;i++)
{
if(ch==i)
{
temp[i-97]++;
letter++;
break;
}
}
}
}
printf("%ld\n",letter);
for(i=65;i<90;i++)
{
printf("%c:%d%",i,temp[i-65]*100/letter);
if((i+1)%5==0)
printf("\n");
}
}
else
printf("请输入正确的数字\n");
goto main;
}
输出:
文章读取成功,请继续进行操作
英文文章统计程序
(1)打开文件,载入英文文章
(2)统计文章中英文的单词数
(3)统计文章中标点符号数目
(4)统计文章的句子数目
(5)统计文章各英文字母出现的频率
(6)查询文章某个单词出现的次数
(7)退出
请键入相应操作的编号:5
各字母在文章中出现的频率:(出现频率=该字母出现的次数/总字母数)
10
A:0%B:0%C:0%D:0%E:0%
F:0%G:0%H:0%I:0%J:0%
K:0%L:0%M:0%N:0%O:10%
P:0%Q:0%R:10%S:0%T:10%
U:20%V:0%W:0%X:0%Y:50%
英文文章统计程序
(1)打开文件,载入英文文章
(2)统计文章中英文的单词数
(3)统计文章中标点符号数目
(4)统计文章的句子数目
(5)统计文章各英文字母出现的频率
(6)查询文章某个单词出现的次数
(7)退出
请键入相应操作的编号: