Как проверить 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 количество байтов, которые были прочитаны.

Другие вопросы по тегам