请教C语言中如何读取矩阵形式的数据文件?

copyleft007 2005-12-08 09:04:28
比如有个txt文件,存有矩阵形式的数据文件数据如下:
1.1 1.2 1.3
2.1 2.2 2.3
3.1 3.2 3.3
4.1 4.2 4.3
在不知道这个矩阵行数的情况下,如何读取这个文件,以便把这个矩阵的数据赋给一个二维数组(比如a[N][3]?
谢谢大家了
...全文
990 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
copyleft007 2005-12-11
  • 打赏
  • 举报
回复
嘻嘻,分数已经给了二楼的朋友了,请接收
guyanhun 2005-12-10
  • 打赏
  • 举报
回复
在这个页面的右上角有个 管理 的链接,点击进入 给分 *_*
copyleft007 2005-12-10
  • 打赏
  • 举报
回复
farger(发哥) ( )
已经说了,预先不知道矩阵行数,只知道列数。
其实也就是采集的某一个系统随着时间变化的参量。所以是预先不知道会采集到多少组数据的。不过也多谢了
copyleft007 2005-12-10
  • 打赏
  • 举报
回复
多谢“guyanhun(天涯-明月 C++从头开始) ”的帮助
可以运行了,请问如何给分呢?
zhanlinzhangna520 2005-12-09
  • 打赏
  • 举报
回复
这个问题很好解决,可以用一个(*p)[3]指向含3个元素的一维数组的指针变量,前面的指针行移动,后面的数值指向列,这样在不知道行的情况下,没关系的,用个循环语句就够了,程序自己写了。
zhanlinzhangna520 2005-12-09
  • 打赏
  • 举报
回复
这个问题很好解决,可以用一个(*p)[3]指向含N个元素的一维数组的指针变量,前面的指针行移动,后面的数值指向列,这样在不知道行的情况下,没关系的,用个循环语句就够了,程序自己写了。
speeches 2005-12-09
  • 打赏
  • 举报
回复
还得看文件的存放结构, 如 1 2 3 ...中间空格作为分割附或123没有任何分割符,
那就用fgets()一行就ok了,1 2 3 fgets()...

楼上的,这样搞会不会有问题啊..
if(fread(a[n][3], 3*sizeof(float), 1, fp) == EOF)..不考虑文件组织方式...

jixingzhong 2005-12-09
  • 打赏
  • 举报
回复
if(n < N-1) //文件没有全部读取就终止了,提示出错 ..
这个判断是在 N==文件的行数 的前提下的....
jixingzhong 2005-12-09
  • 打赏
  • 举报
回复
#define N 100

FILE *fp;
float a[N][3] ;
int n=0;
for(; n<N; n++)
{
if(fread(a[n][3], 3*sizeof(float), 1, fp) == EOF)
break;
}
if(n < N-1) //文件没有全部读取就终止了,提示出错 ..
printf("ERROR");
farger 2005-12-09
  • 打赏
  • 举报
回复
#define N 4
int main(int argc, char *argv[])
{
float a[N][3];
FILE *fp;
int i,j;
fp = fopen("aa.txt","r");
if(fp == NULL )
{
printf("can not open file\n");
exit(1);
}
for(i=0;i<N;i++)
for(j=0;j<3;j++)
{
fscanf(fp,"%f",&a[i][j]);
printf("%.2f ",a[i][j]);
}
system("PAUSE");
return 0;
}
guyanhun 2005-12-09
  • 打赏
  • 举报
回复
copyleft007(版权所无)
二楼的朋友,请你看看用你的方法写的程序,为何在vc下就是读取不出来呢?

现在的可以.
guyanhun 2005-12-09
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
FILE *fp;
if((fp=fopen("aa.txt","r"))==NULL)
{
printf("error in reading file !\n");
exit(1);
}
float f1,f2,f3;
int n=0;
while(!feof(fp))
{
++n;
if(fscanf(fp,"%f%f%f",&f1,&f2,&f3)==EOF)
break;
}
fclose(fp);
printf("%d rows in the file !\n",n-1);
system("pause");
}
copyleft007 2005-12-09
  • 打赏
  • 举报
回复
劳烦大家把数据保存在aa.txt文件中,把自己的完整可编译读取的程序贴出来。谢谢大家了
copyleft007 2005-12-09
  • 打赏
  • 举报
回复
三楼的朋友,为何采用你的方法读不出来呢?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
void main()
{
FILE *fp;
fp=fopen("aa.txt","rb");
float a[N][3] ;
int n=0;
for(; n<N; n++)
{
if(fread(&a[n][2], 3*sizeof(float), 1, fp) == EOF)
break;
printf("%f,%f,%f\n",a[n][0],a[n][1],a[n][2]);
}
if(n < N-1) //ÎļþûÓÐÈ«²¿¶ÁÈ¡¾ÍÖÕÖ¹ÁË£¬Ìáʾ³ö´í ..
printf("ERROR");
}
copyleft007 2005-12-09
  • 打赏
  • 举报
回复
二楼的朋友,请你看看用你的方法写的程序,为何在vc下就是读取不出来呢?
#include <stdio.h>

#include <string.h>

void main()
{
/*FILE *fp;
fp=fopen("aa.txt","rb");
float f1,f2,f3;
int n=0;
while(!feof(fp))
{
++n;
if(fscanf(fp,"%lf%lf%lf",&f1,&f2,&f3)==EOF)
break;
}
fclose(fp);
}
guyanhun 2005-12-08
  • 打赏
  • 举报
回复
比如a[N][3]?

FILE *fp;
float f1,f2,f3;
int n=0;
while(!feof(fp))
{
++n; //行数.就等于 a[N][3] 中 的 N .
if(fscanf(fp,"%f%f%f",&f1,&f2,&f3)==EOF)
break;
}

69,369

社区成员

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

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