我正在尝试使用getline()函数读取文件,使用bash命令管道输入文件,但输出不合逻辑。
这是我的main.cpp代码:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
string line;
while(getline(cin,line)){
cout<<line<<endl;
}
return 0;
}
我的输入文件名为input.txt,如下所示
4 MF MF FM FF MF MM
MM FF
MF MF MF MF FF
我的bash命令和运行结果
DENGs-MacBook-Pro:APS stevedeng$ g++ -o main main.cpp -std=c++11
DENGs-MacBook-Pro:APS stevedeng$ ./main < input.txt
MF MF MF MF FFMF MM
我认为程序会逐行读取input.txt并将输出打印为与输入文件格式完全相同的格式。
有人可以用唯一的有线外观输出来解释这里发生的事情吗?
如果我能做的唯一方法是从bash管道输入文件而不是使用ifstream ,我如何能够逐行读取结果?任何帮助将不胜感激。
答案 0 :(得分:1)
好像您的终端没有接收或忽略换行符,因此每个新行都会覆盖之前写的行。
有一件事可能是输入文件只包含回车但现在换行,并且由于某种原因getline
不能纠正这个问题。如果这是问题所在,请参阅SO上的以下答案(如果有帮助,请不要忘记upvote。)
另一件事可能是换行没有写入cout
。我建议 - 至少出于诊断目的 - 尝试printf("%s\r\n",line.c_str())
。