使用C++读取管道输入

17

我正在使用以下代码:

#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个回答

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

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

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

此内容为程序相关内容,请将其翻译成中文。请仅返回已翻译的文本,不要进行任何输入操作。 - UpmostScarab

12

cin 无法提取数据时,它不会改变目标变量。所以你的程序最后成功读取的字符串仍然存储在 lineInput 中。

你需要检查 cin.fail(),而且 Erik 展示了最佳实践


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接