【发布时间】:2023-03-04 17:26:01
【问题描述】:
我正在使用 std::getline() 逐行读取文本文件。但是,第一次调用 getline 是读取整个文件!我还尝试将分隔符明确指定为 '\n'。任何想法为什么会发生这种情况?
我的代码:
std::ifstream serialIn;
...
serialIn.open(argv[3]);
...
std::string tmpStr;
std::getline(serialIn, tmpStr, '\n');
// All 570 lines in the file is in tmpStr!
...
std::string serialLine;
std::getline(serialIn, serialLine);
// serialLine == "" here
我使用的是 Visual Studio 2008。文本文件有 570 行(我在 Notepad++ fwiw 中查看它)。
编辑:我通过使用 Notepad++ 将输入文本文件中的行尾转换为“Windows”行尾来解决此问题。该文件是使用 c++ 代码在每行末尾使用 '\n' 编写的。为什么 getline() 需要 Windows 行尾 (\r\n)?这与字符宽度或 Microsoft 实现有关吗?
【问题讨论】:
-
你能把文件的前10行贴出来吗?
-
我很确定 getline() 默认使用
'\n'作为分隔符。我不明白为什么回车会影响它。 -
标准 I/O 库函数读取和写入平台的行尾。因此,针对 Windows C 或 C++ 运行时构建的程序需要 Windows 行尾(令人震惊!)。
-
谢谢,jamesdlin。我认为确认这种行为的文档链接比讽刺更有帮助。