【发布时间】:2012-01-28 17:00:57
【问题描述】:
我正在尝试一次读取一行文本文件并将每一行打印到终端窗口。我正在使用 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$
谁能解释为什么会发生这种情况和/或如何解决这个问题?
【问题讨论】:
-
注意:您在每次迭代中调用 getline 两次。你能通过 hexdump 运行程序的输出吗? (我猜你的源文本文件中有奇怪的行尾字符。)