17

I am using the following code:

#include <iostream>
using namespace std;

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

With the following command: echo "Hello" | test.exe

This result is an infinite loop printing "Hello". How can I make it read and print a single "Hello"?

Boppity Bop
  • 9,613
  • 13
  • 72
  • 151

2 Answers2

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

If you really want full lines, use:

string lineInput;
while (getline(cin,lineInput)) {
  cout << lineInput;
}
Erik
  • 88,732
  • 13
  • 198
  • 189
12

When cin fails to extract, it doesn't change the target variable. So whatever string your program last read successfully is stuck in lineInput.

You need to check cin.fail(), and Erik has shown the preferred way to do that.

Community
  • 1
  • 1
Ben Voigt
  • 277,958
  • 43
  • 419
  • 720