checking data availability before calling std::getline

There is no standard way to verify if getline will block. You can use:

std::cin.rdbuf()->in_avail()

to see how many characters are definitely available before a read operation may block, but you would have to read the characters one by one before re-checking in_avail as there is no way to know in advance if any of the pending characters is a newline or the actual end of the stream. A getline call might block if this wasn’t the case.

Note that although if in_avail() returns a postive number there are guaranteed that at least that many characters are available before the end of the stream, the converse is not true. If in_avail() returns zero there may still be characters available and the stream might not block immediately.

Leave a Comment