gpt4 book ai didi

c++ - getline 并用 cout 打印

转载 作者:行者123 更新时间:2023-11-30 03:03:59 33 4
gpt4 key购买 nike

我正在尝试一次读取一个文本文件并将每一行打印到终端窗口。我正在使用 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com