从txt中读取float数据C++

1.从txt中读取数据,数据类型为float,下面的代码失败的例子

void getme(){
    long int number=0;
    ifstream ifile;     //说明输入文件流对象ifile
    ofstream ofile;     //说明输出文件流对象ofile
    float a=0;
    int count=0;
    ifile.open( "trainData.txt" );//训练集
    ofile.open("b.txt");
    int len=375;//txt有375个数据,共有5列,75行,需要将前四列读取在一起来,最后一列单独读取出来
    int i=0,j=0;
    vector<vector <float> >test(75,vector<float>(4));//存放前四列
    int trainL[75];//存放最后一列在数组当中
    while(len--){
        ifile>>a;                       //由文件读入数据
        count++; //数据间是tab键隔开的,一行当中有五个数据
        number++;
        if(count<5)//当遇到前四个数据时,将数据存入向量中
        {
            cout<<a<<"\t";//输出与txt中的数据相同
            test[i][j]=a;//赋值失败失败失败,向量值输出还是0,当把test换成数组时,也不能正常赋值,没有值
            j++;
            cout<<test[i][j]<<"\t";
        }
        /*将 读取的数据写入到b.txt文件中,五个为一行
        if(len%5==0)
        ofile<<a<<endl;
        else ofile<<a<<"\t";*/
       else {//当遇到第五个数据时候,存入数组中
            trainL[i]=(int)a;
            cout<<trainL[i]<<endl;
            count=0;
             i++;
            j=0;
        }

        if(ofile.eof()!=0) break;  //当读到文件结束时,ifile.eof()为真
    }
    ifile.close();
    ofile.close();
    cout<<"total numbers:"<<number<<endl;
}

这是trainData.txt前面几行的数据

这是没有正确赋值的结果。

2.同样是读取float数据,思想没有变,但是结果正确。

#include<iostream>  
#include<fstream>
#include<sstream>
#include<cmath>  
#include<cstdlib>
#include<vector>
using namespace std;

void test(vector< vector<float> >&trainData,vector<int> &trainL){
	cout << "-----------test----------- " << endl;
	ifstream in("trainData.txt");
	string line;
	/*vector< vector<float> >trainData(75,vector<float>(5));
	vector<int> trainL(75);*/
	int count=0;
	int i=0,j=0;
	while (getline(in, line)){//获取文件的一行字符串到line中
		stringstream ss(line);//初始化 法1
		double x;
		while (ss >> x){//每一行包含不同个数的数字
			count++;
			if(count<5)
			{
			    trainData[i][j]=x;
			    //cout<<trainData[i][j]<<"\t";
			    j++;
			}
			else
			{
			    trainL[i]=x;
			   // cout<<trainL[i]<<endl;
			    i++;
			    j=0;
			    count=0;
			}
		}
	}
}


int main()
{
    cout<<"data is"<<endl;
    vector< vector<float> >trainData(75,vector<float>(4));
	vector<int> trainL(75);
	
    test(trainData,trainL);
    for(int i=0;i<trainData.size();i++)
    {
        for(int j=0;j<trainData[i].size();j++)
        cout<<trainData[i][j]<<"\t";
        cout<<trainL[i]<<endl;
    }
return 0;
}

输出的结果与txt中的一致:

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值