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”?

4

2 回答 2

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

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

string lineInput;
while (getline(cin,lineInput)) {
  cout << lineInput;
}
于 2011-03-26T23:39:27.840 回答
12

cin提取失败时,它不会改变目标变量。因此,您的程序最后一次成功读取的任何字符串都会卡在lineInput.

您需要进行检查cin.fail()Erik 已经展示了这样做的首选方法

于 2011-03-26T23:44:11.827 回答