我的头发已用完了,所以我想也许有人可以帮助我解决这个问题。
我正在尝试逐行读取文件,这看起来很简单,使用getline()。问题是,我的代码似乎一直忽略\ n,并将整个文件放到一个字符串中,这至少可以说是个问题。
void MakeRandomLayout(int rows, int cols)
{
string fiveByFive = "cubes25.txt";
string fourByFour = "cubes16.txt";
ifstream infile;
while (true) {
infile.open(fourByFour.c_str());
if (infile.fail()) {
infile.clear();
cout << "No such file found";
} else {
break;
}
}
Vector<string> cubes;
string cube;
while (std::getline(infile, cube)) {
cubes.add(cube);
}
}
编辑:运行OSX 10.7。 文件的无限循环未完成,最终将要求提供文件。 没有运气扩展的getline()版本,之前尝试过。 开发和构建/运行的系统相同。
我正在阅读的文本文件如下所示:
AAEEGN ABBJOO ACHOPS AFFKPS AOOTTW CIMOTU DEILRX DELRVY DISTTY EEGHNW EEINSU EHRTVW EIOSST ELRTTY HIMNQU HLNNRZ
每个字符串都在文件的新行中。我没有读到的第二个是相同的25
行,而不是16
答案 0 :(得分:1)
我怀疑您未能正确显示Vector
的内容。转储Vector
时,每次输入后是否打印\n
?您应该,因为getline
会丢弃输入上的换行符。
仅供参考:逐行阅读的典型模式是:
Vector<string> cubes;
string cube;
while(std::getline(infile, cube)) {
cubes.add(cube);
}
请注意,这将丢弃换行符,但会在Vector中为每个条目添加一行。
<小时/> 编辑:无论价值多少,如果您使用的是
std::vector
,您都可以将文件粘贴在一起:
std::ifstream ifile(av[1]);
std::vector<std::string> v(
(std::istream_iterator<std::string>(ifile)),
std::istream_iterator<std::string>());
答案 1 :(得分:1)
Mac软件将'\r'
或'\n'
识别为行尾,以便向后兼容Mac OS Classic。当您的处理代码需要'\r'
时,请确保文本编辑器没有在文件中添加'\n'
行结尾(并验证您认为'\n'
个字符位于实际上,字符串不是'\r'
。