Чтение ввода по каналу с C ++ - PullRequest
11 голосов
/ 27 марта 2011

Я использую следующий код:

#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".Как я могу заставить его читать и печатать один «Привет»?

Ответы [ 2 ]

24 голосов
/ 27 марта 2011
string lineInput;
while (cin >> lineInput) {
  cout << lineInput;
}

Если вам действительно нужны полные строки, используйте:

string lineInput;
while (getline(cin,lineInput)) {
  cout << lineInput;
}
12 голосов
/ 27 марта 2011

Когда cin не удается извлечь, это не меняет целевую переменную.Поэтому любая строка, которая успешно прочитана вашей программой, застряла в lineInput.

Вам нужно проверить cin.fail(), а Эрик показал предпочтительный способ сделать это .

...