分别用C语言和C++读取txt文件到一个二维数组

txt中的数据为浮点类型,有符号。总过29行,34列。我想新建一个29行,34列的二维数组,把txt读经去。

刚刚起步,很多知识不懂,感谢帮助,谢谢谢谢。

参考思路:
打开文件,然后读入一行到字符串str里面,循环读取行即可;
参考例子如下:
#include <stdio.h>
#include <stdlib.h>
/*
1.txt

1,2,3,4,5,6,7
8,9,10,11,12,13,14
15,16,17,18,19,20,21

*/
int main ()
{
FILE *fp;
int **a;//定义二维数组
int i,j;
int row=0,column=0;//行,列
char ch;

//打开文件
if((fp=fopen("1.txt","r"))==NULL)
{
printf("open error\n");
return 1;
}

//统计列数
while(!feof(fp)&&(ch=fgetc(fp))!='\n')
if(ch==',')
column++;

column++;
if(column==1)
{
printf("no data\n");
return 1;
}
//置文件首部
fseek(fp,0L,0);
//统计行数
while(!feof(fp))
if(fgetc(fp)=='\n')
row++;
row++;
if(row==1)
{
printf("no data\n");
return 1;
}

//开辟内存
a=(int**)malloc(sizeof(int*)*row);
if(a==NULL)
{
printf("no memory\n");
return 1;
}
for(i=0;i<row;i++)
{
a[i]=(int*)malloc(sizeof(int)*column);
if(a[i]==NULL)
{
printf("no memory\n");
return 1;
}
}

//置文件首部
fseek(fp,0L,0);
//读入数据
while(!feof(fp))
for(i=0;i<row;i++)
for(j=0;j<column;j++)
fscanf(fp,"%d,",&a[i][j]);

//输出显示
for(i=0;i<row;i++)
{
for(j=0;j<column;j++)
j==column-1?printf("%d",a[i][j]):printf("%d,",a[i][j]);
printf("\n");
}

//关闭文件
fclose(fp);

//释放内存
for(i=0;i<row;i++)
free(a[i]);
free(a);

return 0;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-29
可以打开文件,然后读入一行 到字符串str里面
int a[29][34];
循环读取行
如果现在是第 i行
char *ch=strtok(str,",");
int j=0;
  while(ch!=NULL)  
 {
 a[i][j++]=atof(ch);  
 ch=strtok(NULL,",");
 }追问

#include
void main() {
int i,j;
double data[29][34];
FILE *fp;
fp = fopen("Faults_NNA.txt","r");
for(i=0;i<29;i++) {
for(j=0;j<34;j++) {
fscanf(fp,"%6.4f",&data[i][j]);
printf("%6.4f\n",data[i][j]);
}
}
fclose(fp);
}

前辈,您能帮我看下上面的代码错在哪里吗?

追答

咋了 读不出数据吗

本回答被提问者采纳
第2个回答  2011-05-29
设数组为double,用循环直接读追问

#include
void main() {
int i,j;
double data[29][34];
FILE *fp;
fp = fopen("Faults_NNA.txt","r");
for(i=0;i<29;i++) {
for(j=0;j<34;j++) {
fscanf(fp,"%6.4f",&data[i][j]);
printf("%6.4f\n",data[i][j]);
}
}
fclose(fp);
}

前辈,您能帮我看下上面的代码错在哪里吗?

相似回答