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

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

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与这些数的差值的平方和最小(最小二乘法 ,选做,但可以追加分数 )
我要代码~~时间紧迫
展开
 我来答
金鱼8884
推荐于2017-09-19 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14950
学生

向TA提问 私信TA
展开全部

  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);  //关闭指针
}
百度网友6fe74e2
推荐于2017-09-01 · TA获得超过6593个赞
知道大有可为答主
回答量:1973
采纳率:100%
帮助的人:268万
展开全部
#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);

}
只要能读到数据,其它操作就相对简单了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦里寻你我他
2013-04-27 · TA获得超过2199个赞
知道大有可为答主
回答量:2171
采纳率:42%
帮助的人:1211万
展开全部
可以用两个 for循环来读取
第一个for循环读取文本的行,第二个for循环来读取以“”分割的字符串的列
追问
需要详细代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式