我刚刚开始学习锈,我正在尝试创造一个猜谜游戏。但是,我始终遇到一个错误,从stdin中读取的数据也捕获了stdin之前的所有输入。我正在Windows 10上运行这个程序。
我真正的猜游戏程序:
use std::{io};
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let x: u8 = rng.gen_range(0..=10);
let mut end_game: bool = false;
println!("Welcome to the number guessing game");
println!("After each guess, I'll let you know if you're too high or too low");
let mut guess: String = String::new();
let mut guess_int: u8;
while !end_game {
println!("Guess: ");
io::stdin().read_line(&mut guess).expect("Failed to read input");
println!("You guessed {guess}");
guess_int = guess.trim().parse().unwrap();
if guess_int == x {
end_game = true;
} else if guess_int > x {
println!("{} is too high!", guess_int);
} else if guess_int < x {
println!("{} is too low", guess_int);
}
}
println!("You got it!");
}
这是我写的另一个生锈文件,它只是为了确保我认为正在发生的问题正在发生。
use std::io;
fn main() {
let mut input: String = String::new();
println!("what is your name?");
io::stdin().read_line(&mut input).expect("!!");
println!("Input1: {input}");
println!("age?");
io::stdin().read_line(&mut input).expect("!!");
println!("Input2: {input}");
}
这给了我这个:
what is your name?
Input1: Joe
age?
420
Input2: Jack
420
有什么办法可以冲破水声之类的吗?提前谢谢。
发布于 2022-07-28 10:25:11
感谢“PitaJ”和“Masklinn”,他们都提供了答案。
问题是std::io::stdin().read_line(...)
附加到通过引用传递给函数的字符串。因此,在重用字符串以获得输入之前,必须清空传入的字符串。这可以用String::new()
或StringNameHere.clear()
来完成。
我的工作代码最后看起来是这样的:
use std::{io};
use rand::Rng;
fn main() {
// println!("Hello, world! : ");
let mut rng = rand::thread_rng();
let x: u8 = rng.gen_range(0..=20);
let mut num_guesses: u8 = 0;
let mut end_game: bool = false;
println!("Welcome to the number guessing game");
println!("After each guess, I'll let you know if you're too high or too low");
let mut guess: String = String::new();
let mut guess_int: u8;
while !end_game {
println!("Guess: ");
io::stdin().read_line(&mut guess).expect("Failed to read input");
guess_int = guess.trim().parse().unwrap();
guess.clear(); //guess = String::new() works too, but I think this method is easier to understand
num_guesses += 1;
if guess_int == x {
end_game = true;
} else if guess_int > x {
println!("{} is too high!", guess_int);
} else if guess_int < x {
println!("{} is too low", guess_int);
}
}
println!("You got it! You guessed the magic number ({}) in {} guesses", x, num_guesses);
}
https://stackoverflow.com/questions/73157139
复制相似问题