Читайте неизвестное количество строк из консоли в C ++ - PullRequest
5 голосов
/ 02 ноября 2011

Я использую следующий цикл для чтения неизвестного числа строк из консоли, но он не работает.После подачи ввода я продолжаю нажимать ввод, но цикл не останавливается.

vector<string> file;    
string line;
while(getline(cin,line)
    file.push_back(line);

Ответы [ 4 ]

6 голосов
/ 02 ноября 2011

Потому что getline будет иметь значение true, даже если вы нажмете только ввод.

Вам нужно сравнить чтение string с пустой строкой и разорвать, если true.

vector<string> file;    
string line;
while(getline(cin,line))
{
    if (line.empty())
       break;
    file.push_back(line);
}
4 голосов
/ 23 января 2019

Для getline легко, как это предлагают другие ответы:

string line;
while(getline(cin,line))
{
    if (line.empty())
       break;
    file.push_back(line);
}

Но для cin objects, я нашел способ без необходимости использовать какой-либо ломающий символ . Вы должны использовать одну и ту же переменную, чтобы заклинать все объекты. После использования вам нужно установить значение выхода по умолчанию. Затем проверьте, совпадает ли ваша переменная после следующего cin. Пример:

string o;
while(true){
    cin>>o;
    if (o.compare("tmp")==0)
        break;
    // your normal code
    o="tmp";
}
1 голос
/ 02 ноября 2011

Попробуйте:

vector<string> file;    
string line;
while( getline(cin,line))
{
    if( line.empty())
        break;
    file.push_back(line);
}
0 голосов
/ 02 ноября 2011

Вы должны указать конец файла в вашем приложении.В Linux это Ctrl-D, а в некоторых системах Microsoft это может быть Ctrl-Z

И ваше приложение должно проверить состояние конца файла, используя eof()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...