关于打开文件并计算文档中字符的信息熵的代码程序。

solar_coco 2011-12-08 11:31:30
这个编译的时候没有错误,但是运行的时候总是说打开文件失败。麻烦,大侠们帮忙看看是哪里出了问题?在此感激不尽。。。。。。。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXN 65575
int main()
{
int p[26]={0};
int N[26]={0};
double tem=0.0,H=0.0;
int sum=0;
int m,n,x,y;
char b[MAXN],ch;
int i;
//FILE *fp;
//int ch;
FILE* fp;
char fname[50]; //用于存放文件名
printf("输入文件名:");
scanf("%s",fname);
fp=fopen(fname,"r");
if(fp==NULL) //如果失败了
{
printf("错误!");
exit(0); //中止程序
}
//fp=fopen("C:\Documents and Settings\Administrator\桌面\ENG.txt","r+");
//if(!fp)
//{
//printf("file cannot be opened");
//exit(1);
//}
while((ch=fgetc(fp))!=EOF)
{
b[i]=ch;
i++;
}
for(i=0;i<MAXN;i++)
{
for(m=65,n=97;m<91&&n<123;m++,n++)
{
if(b[i]==m||b[i]==n)
N[m-65]++;
break;
}
}
for( y=0;y<26;y++)
sum=sum+N[y];
for( x=0;x<26;x++)
{
p[x]=N[x]/sum;
tem= p[x]*log10(p[x]);
H=H+tem;
}
printf("%3d\n",sum);
printf("%3f\n",H);
fclose(fp); //关闭文件
return 0;
}
...全文
282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ABitTrouble 2011-12-09
  • 打赏
  • 举报
回复
我把上面代码保存到tt.c文件中
在linux下用“gcc -o tt tt.c -lm”命令编译正常
执行也没问题,能够统计出数据,至于数据是否正确我就不管了,最起码不报错
李迟 2011-12-09
  • 打赏
  • 举报
回复
按3楼的试试,或者将那个文件放到你的工程目录下,用相对路径打开。
today_now 2011-12-09
  • 打赏
  • 举报
回复
fname按着这样的格式输入试试
C:\\Documents and Settings\\Administrator\\桌面\\ENG.txt
solar_coco 2011-12-08
  • 打赏
  • 举报
回复
补充一点:这个程序目的是想打开一个英文文档,计算其中英文字母的信息熵。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧