Подтвердить что ты не робот

Как проверить EOF на `read_line()`?

Учитывая приведенный ниже код, как я могу специально проверить EOF? Вернее, как я могу различать "нет ничего здесь" и "он взорвался"?

match io::stdin().read_line() {
    Ok(l) => print!("{}", l),
    Err(_) => do_something_else(),
}
4b9b3361

Ответ 1

Из документации для read_line:

В случае успеха эта функция вернет общее количество прочитанных байтов.

Если эта функция возвращает Ok(0), поток достиг EOF.

Это означает, что мы можем проверить успешное значение нуля:

use std::io::{self, BufRead};

fn main() -> io::Result<()> {
    let mut empty: &[u8] = &[];
    let mut buffer = String::new();

    let bytes = empty.read_line(&mut buffer)?;
    if bytes == 0 {
        println!("EOF reached");
    }

    Ok(())
}