Страницы

Поиск по вопросам

среда, 27 февраля 2019 г.

Обработка ошибок в Rust

Есть программа на rust, взятая отсюда: Учебник по Rust
Захотелось мне, чтобы программа постоянно выводила собственный префикс ("guess_game>> "). По-этому немного пришлось подкорректировать строки перед запросом ввода.
В оригинале было так
println!("Пожалуйста, введите предположение.");
Если просто заменить println! на print!, у меня вывод сбрасывался на терминал слишком поздно. Выход был найден в принудительном вызове stdout().flush(). Но, когда я добавил обработку ошибок, как приведена ниже, при запуске программы стали бесконечно рисоваться строки "guess_game>> try: ". Прошу объяснить, почему так и какова логика?
extern crate rand;
use std::io::stdin; use std::io::Write; use std::io::stdout; use rand::Rng; use std::cmp::Ordering;
fn main() { let snum = rand::thread_rng().gen_range(1, 101); println!("guess_game>> rnd: {}", snum);
loop { let mut guess = String::new();
print!("guess_game>> try: "); match stdout().flush() { Ok(_) => continue, Err(_) => continue, };
stdin().read_line(&mut guess) .ok() .expect("Fail read line");
let guess: u32 = match guess.trim().parse() { Ok(num) => num, Err(_) => continue, };
match guess.cmp(&snum) { Ordering::Less => println!("guess_game>> Less"), Ordering::Equal => { println!("guess_game>> Equal"); break; } Ordering::Greater => println!("guess_game>> Greater"), } } }
UPD: Решение:
print!("guess_game>> try: "); match stdout().flush() { Ok(_) => (), Err(_) => (), };


Ответ

У вас бесконечно выводится guess_game>> try: по тому, что у вас получился бесконечный цикл.

Комментариев нет:

Отправить комментарий