C语言读取文件中数字并且转为二维数组

我有一个特定数据文件,但是数字排版格式很乱想把它读取出来并存在一个特定矩阵当中

0.7577 0.3500 0.8687 0.1690 0.9797 0.9037 0.3993 0.1206
0.7431 0.1966 0.0844 0.6491 0.4389 0.8909 0.5269 0.5895
0.3922 0.2511 0.3998 0.7317 0.1111 0.3342 0.4168 0.2262
0.6555 0.6160 0.2599 0.6477 0.2581 0.6987 0.6569 0.3846
0.1712 0.4733 0.8001 0.4509 0.4087 0.1978 0.6280 0.5830
0.7060 0.3517 0.4314 0.5470 0.5949 0.0305 0.2920 0.2518
0.0318 0.8308 0.9106 0.2963 0.2622 0.7441 0.4317 0.2904
0.2769 0.5853 0.1818 0.7447 0.6028 0.5000 0.0155 0.6171
0.0462 0.5497 0.2638 0.1890 0.7112 0.4799 0.9841 0.2653
0.0971 0.9172 0.1455 0.6868 0.2217 0.9047 0.1672 0.8244
0.8235 0.2858 0.1361 0.1835 0.1174 0.6099 0.1062 0.9827
0.6948 0.7572 0.8693 0.3685 0.2967 0.6177 0.3724 0.7302
0.3171 0.7537 0.5797 0.6256 0.3188 0.8594 0.1981 0.3439
0.9502 0.3804 0.5499 0.7802 0.4242 0.8055 0.4897 0.5841
0.0344 0.5678 0.1450 0.0811 0.5079 0.5767 0.3395 0.1078
0.4387 0.0759 0.8530 0.9294 0.0855 0.1829 0.9516 0.9063
0.3816 0.0540 0.6221 0.7757 0.2625 0.2399 0.9203 0.8797
0.7655 0.5308 0.3510 0.4868 0.8010 0.8865 0.0527 0.8178
0.7952 0.7792 0.5132 0.4359 0.0292 0.0287 0.7379 0.2607
0.1869 0.9340 0.4018 0.4468 0.9289 0.4899 0.2691 0.5944
0.4898 0.1299 0.0760 0.3063 0.7303 0.1679 0.4228 0.0225
0.4456 0.5688 0.2399 0.5085 0.4886 0.9787 0.5479 0.4253
格式类似于这个
读取后存在50*50的 矩阵当中
并求出一个Z与这些数的差值的平方和最小(最小二乘法 ,选做,但可以追加分数 )
我要代码~~时间紧迫

  1、使用双层循环语句,就可以依次把数据顺序读入到一个二维数组当中了。

  2、例程:

#include <stdio.h>
#include <string.h>
#define MAXLINE 3
#define MAXCOLUMN 10
void main(void){
    FILE *fp; //文件指针
    char arr[MAXLINE][MAXCOLUMN]={0};  //定义3行10列的二维数组并初始化
    int i = -1;
    if((fp=fopen("./test/filename.txt","r"))==NULL){ //打开txt文件
        perror("File open error!\n");
        return;
    }
    while((fgets(arr[++i],MAXCOLUMN+1,fp))!=NULL) //读取一行并存到arr数组
        printf("%d: ",i); //打印行号
        //puts(arr[i]);
        char *subarr = strtok(arr[i]," ");  //以空格为分隔符从arr[i]中获得字串
        while(subarr!=NULL){
            data[i][j] = atoi(subarr);  //将字串转为int型数据存入data数组
            printf("%d\t",data[i][j]);  //打印data[i][j
            subarr = strtok(NULL," ");  //继续获得arr[i]中的字串
            j++;  //data数组列加一
        }
        printf("\n");    
    }
    //循环完毕后,所有数据已在data数组中
    printf("\n");
    fclose(fp);  //关闭指针
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-01
#include "stdio.h"
int main()
{
double a[50][50]={0};
int i,j;
FILE *fp;
if((fp=open("data.txt","r"))==NULL)
{
printf("File open failed !\n");
return 1;
}
for(i=0;i<50;i++)//读取
for(j=0;j<50;j++)
fscanf(fp,"%lf",&a[i][j]);
for(i=0;i<50;i++)//显示
{
for(j=0;j<50;j++)
printf("%.4lf ",a[i][j]);
printf("\n");

}
fclose(fp);

}
只要能读到数据,其它操作就相对简单了。本回答被提问者采纳
第2个回答  2013-04-27
可以用两个 for循环来读取
第一个for循环读取文本的行,第二个for循环来读取以“”分割的字符串的列追问

需要详细代码

相似回答