C++从Windows到Linux的可移植性



我已经成功地在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(。

相关内容

  • 没有找到相关文章

最新更新