用C ++读取管道输入

时间:2011-03-26 23:36:15

标签: c++ pipe stdin cin

我使用以下代码:

#include <iostream>
using namespace std;

int main(int argc, char **argv) {
    string lineInput = " ";
    while(lineInput.length()>0) {
        cin >> lineInput;
        cout << lineInput;
    }
    return 0;
}

使用以下命令: echo "Hello" | test.exe

结果是无限循环打印“Hello”。如何让它读取并打印单个“Hello”?

2 个答案:

答案 0 :(得分:24)

string lineInput;
while (cin >> lineInput) {
  cout << lineInput;
}

如果你真的想要整行,请使用:

string lineInput;
while (getline(cin,lineInput)) {
  cout << lineInput;
}

答案 1 :(得分:12)

cin无法提取时,它不会更改目标变量。因此,您的程序上次成功读取的任何字符串都会卡在lineInput

您需要检查cin.fail()Erik has shown the preferred way to do that