我已经成功地在Windows上的C++中使用以下代码(通过CodeBlocks(,并且最近尝试在Linux(Ubuntu 18.04(上也通过CodeBlocks使用相同的代码。代码似乎编译良好,但在执行时失败。
该代码的目的是将逗号分隔的数字文本文件导入数组。
在Windows和Linux中,我都在使用GNU GCC编译器。
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include <stdlib.h>
using namespace std;
typedef vector <double> record_t;
typedef vector <record_t> data_t;
istream& operator >> ( istream& ins, record_t& record)
{
record.clear();
string line;
getline( ins, line );
stringstream ss( line );
string field;
while (getline( ss, field, ',' ))
{
stringstream fs( field );
double f = 0.0;
fs >> f;
record.push_back( f );
}
return ins;
}
//-----------------------------------------------------------------------------
istream& operator >> ( istream& ins, data_t& data )
{
data.clear();
record_t record;
while (ins >> record)
{
data.push_back( record );
}
return ins;
}
//-----------------------------------------------------------------------------
int main()
{
data_t data;
ifstream infile( "Import File.txt" );
infile >> data;
if (!infile.eof())
{
cout << "Unsuccessful Import!n";
return 1;
}
infile.close();
cout << "Your file contains " << data.size()-1 << " records.n";
return 0;
}
我已经检查了 Linux 上是否存在必要的头文件,情况似乎确实如此。
如果我注释掉EOF,请检查控制台返回以下消息:
Process returned 49 (0x31)
在 Linux 下失败的导入文件片段是:
1138,1139,1137.25,1138.5
1138.25,1138.75,1138.25,1138.5
1138.75,1139,1138.5,1138.75
1138.75,1138.75,1138.25,1138.25
1138.25,1138.25,1137.5,1137.5
1137.5,1138.75,1137.5,1138.5
1138.75,1143.75,1138.75,1143
1143.25,1145.75,1143.25,1144.5
1144.5,1144.75,1143,1143.25
1143.5,1144.5,1143.25,1144.25
感谢在寻找解决方案方面的任何帮助。
main
中的return 4321;
向操作系统报告不成功的返回代码。只有0
返回代码(又名EXIT_SUCCESS
(被认为是成功的。
将其更改为return 0
或完全删除该return
语句(在C++main
具有隐式return 0
(。