std::istream::get
не удаляет перевод строки из потока. Это означает, что следующий вызов std::istream::get
немедленно найдет новую строку и ничего не прочитает в буфер, установит бит ошибки и вернется. Поскольку поток в настоящее время находится в состоянии сбоя, все последующие чтения мгновенно терпят неудачу. Вы можете cin.ignore()
перевод строки, но более прямым подходом является использование std::istream::getline
, потому что он удаляет перевод строки для вас.
Всегда проверяйте состояние потока после транзакции ввода-вывода, чтобы сделать уверен, что это удалось.
Примечание:
Предпочитают использовать std::string
и std::getline
для необработанных массивов символов и функций, которые их используют. std::istream::get
и std::istream::getline
оба помечают поток как сбойный, если предоставленный буфер слишком мал. Размер string
, предоставленный для std::getline
, будет изменен, так что, если у вас осталось динамическое хранилище c, переполнения буфера и ошибки, возникшие для их предотвращения, не являются проблемой. Если система не может выделить буфер достаточного размера для string
, возникает исключение, чтобы вы знали о проблеме.
Предпочитают использовать буквы, например 'A'
, для необработанного кода ASCII. С одной стороны, намерение 'A"
сразу узнаваемо даже самым сырым программистам, и всегда есть вероятность, что реализация не использует ASCII в качестве кодировки по умолчанию.