提问人:Jayce444 提问时间:11/12/2021 更新时间:11/12/2021 访问量:139
C++ 字符串流的 EOF 在编译+执行环境之间有不同的结果
EOF for C++ string stream has varying results between compile+execution environments
问:
我的朋友正在做一个神经网络项目。从本教程中复制了一些代码,他使用这部分代码将文件中的数字行读取为向量:
void TrainingData::getTopology(vector<unsigned> &topology)
{
string line;
string label;
getline(m_trainingDataFile, line);
stringstream ss(line);
ss >> label;
if (this->isEof() || label.compare("topology:") != 0) {
abort();
}
while (!ss.eof()) {
unsigned n;
ss >> n;
topology.push_back(n);
}
return;
}
当使用 MinGW 编译和运行它时,数字行被正确读取。但是,当使用 WSL 编译和运行它时,最后一个数字会重复,即读取结果存储在向量中。3 2 1
3 2 1 1
为什么它在 WSL 中重复?难道不应该在读取最后一个数字后设置 EOF 位,以便它突破 while 循环吗?
答: 暂无答案
评论
getline
应包含换行符。在你读完最后一个字符(换行符)之前,你还没有命中,这不仅仅是读数字。我的猜测是数据文件略有不同:一个有换行符,另一个没有eof