Как проверить EOF на `read_line()`? Учитывая приведенный ниже код, как я могу специально проверить EOF? Вернее, как я могу различать "нет ничего здесь" и "он взорвался"? match io::stdin().read_line() { Ok(l) => print!("{}", l), Err(_) => do_something_else(), } Ответ 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(()) }
Ответ 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(()) }