Как пропустить строку стандартного ввода? - PullRequest
0 голосов
/ 09 декабря 2018

Я читаю стандартный ввод и хочу перестать пропускать все, когда сталкиваюсь со строкой, которая начинается с «a»:

while(cin.peek() != 'a') {
    cin.get();
}

Единственная проблема в том, что это также срабатывает, если у меня есть aв середине линии.Я бы попробовал cin.getline();, но я не знаю максимальную длину линии.Есть ли способ просто перейти на следующую строку?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вы можете заменить cin.get() на cin.ignore(numeric_limits<streamsize>::max(), "\n").

Где numeric_limits<streamsize>::max() - максимальное количество извлекаемых символов, а "\n" указывает, что значение, которое нужно остановить для извлечения символов, - это конец строки (в дополнение к концу файла).

0 голосов
/ 09 декабря 2018

Вы можете сделать это самостоятельно, например:

#include <iostream>
#include <string>

int main() {
    bool skip = true;
    for(std::string line; std::getline(std::cin, line);)
    {
        if(line.size() && line[0] == 'a')
            skip = false;
        if(!skip)
            std::cout << line<< std::endl;
    }
    return 0;
}

Демонстрация в реальном времени

Это будет игнорировать каждую прочитанную строку, покавстречает непустую строку, начинающуюся с символа a.После этого он прекратит пропуск пропущенных строк и напечатает каждую строку.

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