Это уловка-22; Вы не можете знать , что это последняя строка, пока она не будет введена полностью (включая возврат каретки в конце), и вы можете ее проанализировать. Таким образом, вы знаете, что могли пропустить ожидание, если уже упустили свой шанс.
Это, конечно, предполагает, что вы определяете последнюю строку на основе ее содержимого (например, пустая строка, конкретная строка "42" и т. Д.). Если у вас есть другие способы определения последней строки, то вы можете использовать это как условие цикла while - следовательно, вам не нужно ждать, чтобы прочитать строку «sentinel», которая просто говорит вам выйти.
Но в примере кода, который вы разместили, вы получите доступ к строке «42» только после того, как она будет введена полностью - включая некоторый ограничитель строки (возврат каретки, EOF и т. Д.). Таким образом, до тех пор, пока вы не нажмете кнопку возврата, эта строка не существует с точки зрения читателя.