У вас есть несколько вариантов.
Вы можете просто позвонить по номеру cin.getline()
, который будет извлекать оставшуюся часть строки, включая символы новой строки, и оставить указатель в начале следующей строки. Работает до тех пор, пока вы знаете, что остальная часть входной строки не знает.
Вы также можете использовать cin.ignore(1)
или cin.ignore(2)
, если вы знаете новая строка в следующем. Для входных потоков, которые генерируют CR + LF вместо одного, вам придется игнорировать два символа, и вам решать, получать ли CR или CR + LF.
Другой вариант - использовать cin.peek()
, чтобы проверить, что следующий символ опережает время. Таким образом, вы можете использовать пропустить новые строки без использования символов, отличных от новой строки. Например:
void skipNewlines (istream &in) {
int ch;
while ((ch = in.peek()) == '\r' || ch == '\n')
in.ignore();
// and now newlines skipped and next in.get() will read the next char.
}
Вы можете изменить это, чтобы пропустить все пробелы. Этот вариант, вероятно, работает наиболее плавно с использованием cin >> T
.
Вы также можете рассмотреть возможность написания собственной функции ввода символов, которая читает следующий символ, но игнорирует разрывы строк (или что-то еще). Например:
int getWithoutNewline (istream &in) {
int ch;
do {
ch = in.get();
} while (ch == '\n' || ch == '\r');
return ch;
}
Затем используйте getWithoutNewline(cin)
вместо cin.get()
читать символы при разборе ваших чисел. У вас есть гибкость; вы можете, например, перевести новые строки в пробелы. Это имеет то преимущество, что вы можете работать без вас, чтобы знать что-либо о местоположении или форме разрыва строки. Однако он может не работать для всех ситуаций.
Лично я не стал бы приближаться к слепому отбрасыванию всего содержимого.Я даже не уверен, что это возможно, учитывая, что после каждой строки нет конца файла. Самое близкое приближение к тому, что вы просите, насколько это возможно, - просто позвонить getline()
, чтобы читать и использовать оставшуюся часть строки (включая строки перевода).
Выберите какой-либо из этих вариантов, или какой-либо из них, подходит для вашего приложения и использования наилучшим образом.
Есть ли причина, по которой вы не используете форматированный вход? – utnapistim
@utnapistim Мне нужно читать по одному персонажу за раз и выполнять некоторые задания на прочитанном символе. – Pradeep