std :: getline只读一行:

时间:2013-12-13 02:07:10

标签: c++

我从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。

1 个答案:

答案 0 :(得分:3)

\ r \ n不是默认分隔符。

您可以在第三个参数中设置“getline”的分隔符。

getline (myfile,line, '\r');