Не существует стандартного способа проверить, будет ли getline
блокироваться.Вы можете использовать:
std::cin.rdbuf()->in_avail()
, чтобы увидеть, сколько символов определенно доступно, прежде чем операция чтения может заблокироваться, но вам придется прочитать символы по одному перед повторной проверкой in_avail
, так как нетспособ заранее узнать, является ли какой-либо из ожидающих символов новой строкой или фактическим концом потока.Вызов getline
может блокироваться, если это не так.
Обратите внимание, что, хотя in_avail()
возвращает положительное число, гарантируется, что по крайней мере столько символов будет доступно до конца потока,обратное неверно.Если in_avail()
возвращает ноль, все еще могут быть доступны символы, и поток может не блокироваться немедленно.