我从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。
答案 0 :(得分:3)
\ r \ n不是默认分隔符。
您可以在第三个参数中设置“getline”的分隔符。
getline (myfile,line, '\r');