从bash输入文件并使用getline(cin,line)逐行读取

时间:2017-01-30 20:41:51

标签: c++

我正在尝试使用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 ,我如何能够逐行读取结果?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好像您的终端没有接收或忽略换行符,因此每个新行都会覆盖之前写的行。

有一件事可能是输入文件只包含回车但现在换行,并且由于某种原因getline不能纠正这个问题。如果这是问题所在,请参阅SO上的以下答案(如果有帮助,请不要忘记upvote。)

另一件事可能是换行没有写入cout。我建议 - 至少出于诊断目的 - 尝试printf("%s\r\n",line.c_str())