| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1681 人关注过本帖
标题:求助,从txt中读入列向量老是不正确
只看楼主 加入收藏
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:8 
求助,从txt中读入列向量老是不正确
我想实现从txt中读入一列数据的功能,并写到矩阵data中。
txt中数据是:
             1.2
             2.33
             3.444
             4.1111
             5.23213123
但是我的代码执行出来结果是:
-6277436776947227700000000000000000000000000000000000000000000000000.000000
-6277436783004630300000000000000000000000000000000000000000000000000.000000
-6277436786500976200000000000000000000000000000000000000000000000000.000000
-6277436788420357300000000000000000000000000000000000000000000000000.000000
-6277436790179563400000000000000000000000000000000000000000000000000.000000
让我很苦恼啊,各位看看怎么回事。
程序代码:
#include<stdio.h>
#include<stdlib.h>
double main()
{
char fpath[4][50]={"E:/aa.txt","E:/bb.txt","E:/cc.txt","E:/dd.txt"};
FILE *f1;                    //打开文件
long size_f1;                //数据列数
double *data;               //读入文件的动态数组

int i;
int n=0;
int mid;
f1=fopen(fpath[0],"r");

//获取文件行数,方便创建动态数组
if(f1!=NULL){
   while(!feof(f1))
     {   
           mid=fgetc(f1);  //从txt文本中读取一个字符赋值给mid
           if(mid=='\n')   //如果这个字符为换行符
            n++;           //记录txt数据行数
      }
   
      size_f1=n+1;         //最后一行没有换行符,所以+1
      printf("txt行数为: %ld\n",size_f1);
      rewind(f1);          //指针归位

//开始读入文本      
      data=(double*)malloc(sizeof(double)*size_f1);

      for (i=0;i<size_f1;i++)
      {
          
          fscanf(f1,"%f", &data[i]);  // 循环读
          printf("a=%f\n",data[i]);
          
      }
        fclose(f1);
             }
free(data);
}

另外,一般处理大量数据,使用二进制流还是文本流,有什么注意事项吗
2016-05-27 10:52
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 楼主 lebronze
有哪里需要改动的还望各位指出啊?多谢
2016-05-27 10:54
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:5 
double类型要用lf
fscanf(f1, "%lf", &data[i]);  // 循环读
其实有编译告警的,注意下就能解决
2016-05-27 10:57
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 3楼 grmmylbs
哦,是这样的,解决了。
多谢版主,我的C语言基础真的不行。。
另外有个问题,我想把这个txt中读数据的函数作为子函数:
double read_val(char *fpath)
(输入:txt文件的地址,输出:从txt中读取的数组)。然后用主函数调用它,
x0=read_val(path_data[0]);
,现在问题是主函数返回值数组即x0怎么定义,因为事先并不知道读取文件的行数。
或者说有什么更为成熟的方法?
还望版主不吝赐教
2016-05-27 11:11
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
如果不知道行数的话,还是按以前的为好
2016-05-27 18:06
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
用动态存储,先将数据读出暂时存放好,之后再怎样处理就简单了。
2016-05-27 21:07
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 5楼 grmmylbs
以前的指的是什么?
2016-05-30 14:49
lebronze
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-5-25
收藏
得分:0 
回复 6楼 吹水佬
我也知道是动态数组,但是这个实在子函数(读取数据子函数)里申请的,在子函数最后会free掉,你的意思是不free?
2016-05-30 14:50
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用lebronze在2016-5-30 14:50:35的发言:

我也知道是动态数组,但是这个实在子函数(读取数据子函数)里申请的,在子函数最后会free掉,你的意思是不free?

由函数返回动态创建的数组,数组元素个数用输出参数。
程序代码:
#include <stdio.h>
#include <stdlib.h>

void _Createtxt()
{
    FILE *fp;
    fp = fopen("test.txt", "w");
    fputs("1.2\n", fp);
    fputs("2.33\n", fp);
    fputs("3.444\n", fp);
    fputs("4.1111\n", fp);
    fputs("5.23213123", fp);
    fclose(fp);
}

double *_Gettxt(const char *txtFileName, int *count)
{
    FILE *fp;
    *count = 0;
    fp = fopen(txtFileName, "a+");
    fseek(fp, -1, SEEK_END);
    if (fgetc(fp) != '\n')
    {
        fseek(fp, 0, SEEK_END);        
        fputc('\n', fp);
    }
    rewind(fp);
    char s[256];
    fgets(s, 256, fp);
    while (!feof(fp))
    {
        (*count)++;
        fgets(s, 256, fp);
    }
    double *data = (double*)malloc(*count * sizeof(double));
    rewind(fp);
    for (int i=0; i<*count; i++)
    {
        fscanf(fp,"%lf", &data[i]); 
    }
    fclose(fp);
    return data;
}

main()
{
    _Createtxt();
    int count=0;
    double *data = _Gettxt("test.txt", &count);
    for (int i=0; i<count; i++)
    {
        printf("%lf\n", data[i]);
    }
    free(data);
}
2016-05-30 23:10
快速回复:求助,从txt中读入列向量老是不正确
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025792 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved