Как проверить EOF в read_line в Rust 1.12?
Рассмотрим следующую программу, как мне обнаружить EOF в stdin и разорвать цикл?
use std::io;
use std::process;
fn main() {
let mut sum = 0;
loop {
let mut number_str = String::new();
match io::stdin().read_line(&mut number_str) {
Ok(n) => {},
Err(e) => { println!("ERROR: got '{}' when reading a line", e) }
}
match number_str.trim().parse::<i32>() {
Err(n) => {
println!("ERROR: Entered something that is not a number: '{}'",
number_str.trim_right());
process::exit(1)
},
Ok(n) => { sum += n }
}
}
}
Примечание: есть идентичный вопрос, но ответ, кажется, уже устарел, поэтому я добавил номер версии в заголовок вопроса.
1 ответ
Решение
Из документации дляread_line
:
Если этот читатель в настоящее время на EOF, то эта функция не будет изменять
buf
и вернетсяOk(n)
гдеn
количество байтов, которые были прочитаны.