关于读取文件浮点数的疑问

喵喵无敌喵喵 2015-03-26 11:51:43
一个文档中存着类似这样的数据:
12 34 15
5.5 9 0
-8 8.5 9
··········
不清楚有多少列,但是每行的数字个数是一样的,现在想把这个文件中的数据读进数组
我的想法是先扫描一共有多少行,然后读取第一行,按照分隔符判断一行有多少个数据,就确定了数组的大小,最后一行一行把每行的字符串提取转换为浮点数据存进数组中。
现在想寻求更好的思路。
...全文
135 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
喵喵无敌喵喵 2015-03-27
  • 打赏
  • 举报
回复
可能我描述不清楚,每行的数字个数不一定是我列出来的3个,可能是很多个的,但是每行的个数都是一样的,可以看成是一个行数和列数位置的大型行列式。
幻夢之葉 2015-03-27
  • 打赏
  • 举报
回复
vector<float>存储即可 sscanf直接按行读取到三个数字,置入vector 一直循环到结束

#include <vector>
#include <stdio.h>
#include <assert.h>

using namespace std;


int main()
{
    FILE *fp = fopen("data.txt", "r");
    if( fp == NULL )
    {
        printf("Open file failed");
    }

    vector<float> vecf;
    float f1, f2, f3;
    while( !feof(fp) && fscanf(fp, "%f %f %f", &f1, &f2, &f3) == 3 )
    {
        vecf.push_back(f1);
        vecf.push_back(f2);
        vecf.push_back(f3);
    }

//     assert( vecf.size()%3 == 0 );
//     for( unsigned int i = 0; i < vecf.size()/3; ++i )
//     {
//         printf("%f %f %f\n", vecf[3*i+1], vecf[3*i+1], vecf[3*i+1]);
//     }
//     printf("\n");
}
xiaohuh421 2015-03-27
  • 打赏
  • 举报
回复
因为你在文本中存的是字符串表示的数据. 所以可以一次读取一行, 然后按一定的方式拆分出三段数据. 函数fgets 比如你的例子中, 每个数据间是以空格隔来的, 那么就可以使用空格为拆分依据, 得到每行的三个数据. 函数strtok
imfang 2015-03-27
  • 打赏
  • 举报
回复
数组在内存中是连续存放的,你大可以直接获取并存到一维数组中而不用考虑多少列。
赵4老师 2015-03-27
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.
赵4老师 2015-03-27
  • 打赏
  • 举报
回复
fgets sscanf
Perl 5 教程 by flamephoenix 第一部分 Perl语言 第一章 概述 一、Perl是什么? 二、Perl在哪里? 三、运行 四、注释 第二章 简单变量 一、整型 二、浮点数 三、字符串 第三章 操作符 一、算术操作符 二、整数比较操作符 三、字符串比较操作符 四、逻辑操作符 五、位操作符 六、赋值操作符 七、自增自减操作符 八、字符串联结和重复操作符 九、逗号操作符 十、条件操作符 十一、操作符的次序 第四章 列表和数组变量 一、列表 二、数组--列表的存贮 1、数组的存取 2、字符串中的方括号和变量替换 3、列表范围 4、数组的输出 5、列表/数组的长度 6、子数组 7、有关数组的库函数 第五章 文件读写 一、打开、关闭文件 二、读文件 三、写文件 四、判断文件状态 五、命令行参数 六、打开管道 第六章 模式匹配 一、简介 二、匹配操作符 三、模式中的特殊字符 1、字符 + 2、字符 []和[^] 3、字符 *和? 4、转义字符 5、匹配任意字母或数字 6、锚模式 7、模式中的变量替换 8、字符范围转义前缀 9、匹配任意字符 10、匹配指定数目的字符 11、指定选项 12、模式的部分重用 13、转义和特定字符的执行次序 14、指定模式定界符 15、模式次序变量 四、模式匹配选项 1、匹配所有可能的模式(g选项) 2、忽略大小写(i选项)例 3、将字符串看作多行(m选项) 4、只执行一次变量替换例 5、将字符串看作单行例 6、在模式中忽略空格 五、替换操作符 六、翻译操作符 七、扩展模式匹配 1、不存贮括号内的匹配内容 2、内嵌模式选项 3、肯定的和否定的预见匹配 4、模式注释 第七章 控制结构 一、条件判断 二、循环: 1、while循环 2、until循环 3、for循环 4、针对列表(数组)每个元素的foreach循环 5、do循环 6、循环控制 7、传统的goto语句 三、单行条件 第八章 子程序 一、定义 二、调用 1、用&调用 2、先定义后调用 3、前向引用 4、用do调用 三、返回值 四、局部变量 五、子程序参数传递 1、形式 2、传送数组 六、递归子程序 七、用别名传递数组参数 八、预定义的子程序 第九章 关联数组(哈希表) 一、数组变量的限制 二、定义 三、访问关联数组的元素 四、增加元素 五、创建关联数组 六、从数组变量复制到关联数组 七、元素的增删 八、列出数组的索引和值 九、用关联数组循环 十、用关联数组创建数据结构 1、(单)链表 2、结构 3、树 第十章 格式化输出 一、定义打印格式 二、显示打印格式 三、在打印格式中显示值 1、通用的打印格式 2、格式和局域变量 3、选择值域格式 4、输出值域字符 四、输出到其它文件 五、分页 六、格式化长字符串 七、用printf格式化输出 第十一章 文件系统 一、文件输入/输出函数 1、基本I/O函数 1)open函数 2)用open重定向输入 3)文件重定向 4)指定读写权限 5)close函数 6)print, printf和write函数 7)select函数 8)eof函数 9)间接文件变量 2、跳过和重读数据 3、系统读写函数 4、用getc读取字符 5、用binmode读取二进制文件 二、目录处理函数 1、mkdir 2、chdir 3、opendir 4、closedir 5、readdir 6、telldir 7、seekdir 8、rewinddir 9、rmdir 三、文件属性函数 1、文件重定位函数 2、链接和符号链接函数 3、文件许可权函数 4、其他属性函数 四、使用DBM文件 第十二章 Perl5中的引用(指针) 一、引用简介 二、使用引用 三、使用反斜线(\)操作符 四、引用和数组 五、多维数组 六、子程序的引用 子程序模板 七、数组与子程序 八、文件句柄的引用 第十三章 Perl的面向对象编程 一、模块简介 二、Perl中的类 三、创建类 四、构造函数 .实例变量 五、方法 六、方法的输出 七、方法的调用 八、重载 九、析构函数 十、继承 十一、方法的重载 十二、Perl类和对象的一些注释 第十四章 Perl5的包和模块 一、require函数 1、require函数和子程序库 2、用require指定Perl版本 二、包 1、包的定义 2、在包间切换 3、main包 4、包的引用 5、指定无当前包 6、包和子程序 7、用包定义私有数据 8、包和系统变量 9、访问符号表 三、模块 1、创建模块 2、导入模块 3、预定义模块 附录一 函数集 一、进程处理函数 1、进程启动函数 2、进程终止函数 3、进程控制函数 4、其它控制函数 二、数学函数 三、字符串处理函数 四、标量转换函数 五、数组和列表函数 六、关联数组函数 第二部分 Perl的CGI应用 第一章 cgilib例 第二章 动态创建图像 Copyright: 本教程为flamephoenix翻译整理,欢迎参观我的主页http://flamephoenix.126.com。 本教程欢迎下载、转载和链接,转载必须保留本说明并保持文章完整。本教程不允许以任何形式用于商业用途。 对本教程有何疑问、更正或建议请告诉我,谢谢。 flamephoenix

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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