Есть программа на 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: по тому, что у вас получился бесконечный цикл.
Комментариев нет:
Отправить комментарий