我从 http://www.cplusplus.com/doc/tutorial/files/ 中获取了一些代码为了从文件中读取字符数据:
string line;
ifstream myfile ("example.txt");
if (myfile.is_open()) {
while ( getline (myfile,line) ) {
cout << line << '\n';
}
myfile.close();
}
如果我用 emacs 创建文件并自己放入文本数据,我得到的正是我所期望的:整个文件都已写入。但是如果我尝试从我想要读取的文件中读取数据,那么我只会读取第一行。
File1.txt 不起作用,具有以下十六进制转储(输出被截断):
0000000 1 9 9 8 0 1 0 2 , 9 3 6 , 1 3 .
0000010 3 3 4 5 , 1 3 . 3 3 4 5 , 1 3 .
0000020 3 3 4 5 , 1 3 . 3 3 4 5 , 1 3 4
0000030 8 9 6 , 4 , 0 , 5 \r 1 9 9 8 0 1
0000040 0 2 , 9 3 7 , 1 3 . 3 3 4 5 , 1
0000050 3 . 3 4 5 7 , 1 3 . 3 3 4 5 , 1
0000060 3 . 3 4 5 7 , 1 4 9 8 8 . 5 , 4
0000070 , 0 , 0 \r
File2.txt(确实有效)具有以下十六进制转储:
0000000 1 4 0 3 8 0 , 3 2 5 0 0 , 2
0000010 1 4 0 1 4 \n 1 3 1 3 4 , 2
0000020 3 4 8 , 2 3 4 . 0 2 3 , \n 1 2
0000030 3 4 , 1 2 3 4 8 , 1 2 3
0000040 . 3 9 2 4 \n
很明显,一个文件的行尾字符与另一个文件不同,但我怎样才能克服这个问题呢?我正在使用 MacOSX。
最佳答案
\r 不是默认分隔符。
您可以在第三个参数中设置“getline”的分隔符。
getline (myfile,line, '\r');
关于c++ - std::getline 只读取一行:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557887/