2014-02-10 2 views
0

Зачем нам нужно использовать cin.ignore(), прежде чем принимать ввод в строке?Зачем нам нужно использовать cin.ignore() перед getline (cin, string)?

Что такое обратный процесс? Почему он пропускает ввод в строке (если мы вызываем функцию getline для большего количества переменных), если мы не используем cin.ignore()?

ответ

0

std::getline() вход только «пропускает», если в потоке есть ведущая строка новой строки, которая предшествует введенному вами входу. Это может произойти, если вы ранее выполнили форматированное извлечение, которое оставило остаточную новую строку. По умолчанию std::getline() ограничивает извлечение при приобретении символа новой строки.

ignore() - это функция, которая отбрасывает определенное количество символов (по умолчанию сумма для сброса равна 1). Если вы используете это ранее неформатированное извлечение (например, std::getline()), но после извлечения (например, std::istream::operator>>()), это позволит считывать данные так, как вы ожидаете, потому что они будут отбрасывать остаточную новую строку.

Об этом подробно расскажу в my answer here.

1

Вам нужно всего лишь использовать cin.ignore(), когда есть какой-то предыдущий ввод, который вы не читали. Если этого не происходит, вам не нужно, и это заставит вас игнорировать то, что вы хотите. Наиболее распространенным случаем является игнорирование символа новой строки, который закончился предыдущей строкой.

Если кто-то типа «Foo < введите > бар», и вы хотите, чтобы прочитать «Foo», затем «бар», вы должны игнорировать < ввести > между ними (или использовать функцию, которая делает это автоматически).

Смежные вопросы