求大神帮助,用C语言打开dat文件,dat文件为24310944*5的数组,但执行程序后不正常显示

darren4567 2016-11-01 12:39:40
#include<stdio.h>
#include<stdlib.h>
void main()
{ int i,j;
float a [20000][5];
FILE *fp;
fp=fopen("D:\\研究生学习\\云CT\\多能云CT - 扫描部分\\140KVAirSingles_0.dat","r");
if((fp=fopen("D:\\研究生学习\\云CT\\多能云CT - 扫描部分\\140KVAirSingles_0.dat","r"))==NULL) {
printf("cannot open this file\n");
exit(1);
}
printf("Success!\n");
fread(a,4,100000,fp);
for(i=0;i<20000;i++){for(j=0;j<5;j++)printf("%35f",a[i][j]);printf("\n");}
fclose(fp);
}
这是我编的程序,他是24310944*5的数组
应该如下图所示。
但是我的是这样
且数组定义太多就会停止运行而退出,请问大神如何解决?
...全文
258 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-11-02
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了
darren4567 2016-11-01
  • 打赏
  • 举报
回复
麻烦大神来解答一下,谢谢!
qq282100640 2016-11-01
  • 打赏
  • 举报
回复
二进制要 rb,,,,r不但读不对,,,还有意外结尾
小灸舞 版主 2016-11-01
  • 打赏
  • 举报
回复
1.float改成double试试 2.改成用malloc动态申请 3.可以去掉第一个fopen

#include<stdio.h>
#include<stdlib.h>
void main()
{
	int i, j;
	double **a = (double **)malloc(sizeof(double *)* 5);
	for (i = 0; i<5; i++)
		a[i] = (double *)malloc(sizeof(double)* 200000);
	FILE	*fp;
	if ((fp = fopen("D:\\研究生学习\\云CT\\多能云CT - 扫描部分\\140KVAirSingles_0.dat", "r")) == NULL) {
		printf("cannot open this file\n");
		exit(1);
	}
	printf("Success!\n");
	fread(a, sizeof(double), 100000, fp);
	for (i = 0; i<20000; i++){ for (j = 0; j<5; j++)printf("%.5lf", a[i][j]); printf("\n"); }
	fclose(fp);
}
paschen 2016-11-01
  • 打赏
  • 举报
回复
第一,你调用两次fopen,也就是说打开了两遍,if 中只用判断 fp是否为NULL,不用再打开一次 第二,你那些数据是matlab保存出来的?保存出来的文件有他自己的存储格式,并不是顺着读就读就是你看到的,另外matlab里保存的是double类型,你是按float类型读

69,381

社区成员

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

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