【发布时间】:2020-01-15 17:29:16
【问题描述】:
我已经在 Windows 上的 C++ 中成功使用了以下代码(通过 CodeBlocks),最近还尝试通过 CodeBlocks 在 Linux(Ubuntu 18.04)上使用相同的代码。代码似乎可以正常编译,但执行失败。
代码的目的是将逗号分隔的数字文本文件导入数组。
在 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下导入文件失败的sn-p是:
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
感谢您在寻找解决方案方面的任何帮助。
【问题讨论】:
-
您能否举一个代码失败的输入文件的最小示例?
-
我已经编辑了我的问题以包含文件的 sn-p,该文件可以在 Windows 下运行但在 Linux 下不可用。
标签: linux c++11 portability