c++ - getline 并用 cout 打印

标签 c++ text

我正在尝试一次读取一个文本文件并将每一行打印到终端窗口。我正在使用 g++ 在 mac 上编译,例如 g++ cpp3.cpp -o cpp3。

文本文件如下所示:

20100000001 20100000001.xml
20100000002 20100000002.xml
20100000003 20100000003.xml
20100000004 20100000004.xml

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    ifstream ifs("file.txt");
    string line;
    while(getline(ifs,line)) {
        getline(ifs,line);
        cout << "[ " << line << " ]" << endl;
    }
return 0;
}

我希望输出看起来像:

[20100000001    20100000001.xml]
[20100000002    20100000002.xml]
[20100000003    20100000003.xml]
[20100000004    20100000004.xml]

但是,所有内容都打印到终端中的一行。换句话说,文本文件中的每一行都写在最后一行之上。此外,括号“[”和“]”似乎只写了一次,因此它基本上打印“[”,然后是文件的全部内容,然后是“]”。

这就是终端的最终输出:

user$ ./cpp3
 ]10000000401   20100000004.xml

user$

谁能解释为什么会发生这种情况和/或如何解决这个问题?

最佳答案

查看数据文件 - 可能使用 od -c

写在每一行之上的所有内容听起来好像你在输出中打印 \r(回车)而不是 \n(换行),也许因为数据不包含换行符。 也许文件来自 Windows 环境,并且 getline() 正在剥离换行符,在末尾留下回车符,并且输出没有恢复换行符?

或者,也许文件只包含 \r 行结尾 - 在这种情况下,getline() 会将整个文件作为一行读取,并将其输出作为单行。您可以通过向输出添加一个计数器来证明这一点,并为每个输出行递增它。您对“打印一次方括号”的观察表明,这可能比令人震惊的建议更好。输出中有一个 endl,这很重要。

关于c++ - getline 并用 cout 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9047071/

相关文章:

c++ - 任何开源项目都使用 FC++ 吗?

c++ - 将文本转换为数组

c++ - 用 C++ 扩展 Job/Worker 多线程系统

c++ - 模板 SFINAE 在 conditional_t 内

c++ - 在数学上添加两个字符串?

c++ - 由于 undefined reference 而无法编译?

html - html按钮内的文本连字符

尽管格式有效,MySQL str_to_date 仍生成 NULL

Python - 对于文本文件中的每个值?

vb.net - 我打印了包含多个 "\"的文本,但 "\S"变成了 "1"