Так что я расширяю игру в угадайку, чтобы спросить пользователя, хотят ли они снова играть. Если они наберут y
, программа вернется в основной игровой цикл, а если они введут n
, она просто выйдет из текущего цикла и программа завершится. Если они вводят что-то еще, теоретически это должно просто перейти на вершину цикла play_again
и переназначить переменную yae_or_nay
как то, что игрок вводит следующим. Но он этого не делает или, по крайней мере, выглядит так, как будто перезаписывает его неправильно. Я переназначаю переменную неправильно? Вот код (обратите внимание, что первая половина программы почти такая же, как в учебнике, но, поскольку программа такая короткая, я просто решил включить все это):
extern crate rand;
use std::io;
use std::cmp::Ordering;
use rand::Rng; // random number generation library from rand
fn main() {
println!("Guessing game!\n");
let mut answer = rand::thread_rng().gen_range(1,101);
'gameloop: loop {
println!("Please print your guess:");
let mut yae_or_nay = String::new();
let mut guess = String::new();
io::stdin().read_line(&mut guess)
.expect("Failed to read line");
let guess : u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Not a number!");
continue;
}
};
match guess.cmp(&answer) {
Ordering::Less => println!("Higher!"),
Ordering::Greater => println!("Lower!"),
Ordering::Equal => {
println!("Correct! Would you like to play again? (y/n)");
'play_again: loop {
io::stdin().read_line(&mut yae_or_nay)
.expect("Failed to read line.");
match yae_or_nay.trim() { // match against a string
"y" => {
answer = rand::thread_rng().gen_range(1,101);
println!("Playing again...");
continue 'gameloop;
},
"n" => {
println!("Thanks for playing! Exiting now.");
break
},
_ => {
println!("what? You entered {}", &yae_or_nay);
continue 'play_again
}
};
}
}
}
}
}
А вот фрагмент вывода консоли:
46
Correct! Would you like to play again? (y/n)
i
what? You entered i
y
what? You entered i
y
n
what? You entered i
y
n
. // period here for formatting sake, not actually in console
Как видите, способ переназначения моей программы yae_or_nay
кажется довольно странным. Кто-нибудь знает, что происходит? Заранее спасибо за любую помощь.