Reading piped input with C++

25,221

Solution 1

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

If you really want full lines, use:

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

Solution 2

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.

Share:
25,221

Related videos on Youtube

Boppity Bop
Author by

Boppity Bop

I hate networking, social networking and all sorts of reliance on other people. including asking for help on SO.

Updated on April 28, 2022

Comments

  • Boppity Bop
    Boppity Bop about 2 years

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

  • UpmostScarab
    UpmostScarab about 7 years
    this does not allow you to make user input after.