c++ - std::getline 只读取一行:

标签 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。

最佳答案

\r 不是默认分隔符。

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

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

关于c++ - std::getline 只读取一行:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20557887/

相关文章:

c++ - Libcurl+QtCreator+debian

c++ - tellp 在空 ostringstream 上的标准行为

c++ - C++11 中的静态变量初始化是同步的吗?

C++/MySQL,在 1 次执行中插入 200 个数据点数组

C++ 在 keybd_event() 上发送带有 WM_KEYDOWN 的虚拟键

c++ - 关于 C++ 中的迭代器

c++ - 使用 boost Spirit 为变量分配默认值

c++ - Qt QString Q_PROPERTY 导致 SIGSEGV

C++ OOP 设计决策

C++ 1z 错误 : error: explicit qualification in declaration in deduction guide