使用.is_ok函数时,用户输入始终为真



如果用户按enter键而不输入任何内容,我如何从控制台读取并避免崩溃?

let mut objectnumber = String::new();
println!("mennyi súlyt szeretnél megnézni? 3.=255 int");
if io::stdin().read_line(&mut objectnumber).is_ok() {
println!("{}csdcds", objectnumber);
}
//panic!("{}",objectnumber.len());
if objectnumber.len() < 3 {
let localrandnum: u8 = thread_rng().gen_range(0..=255);
println!("miután nem adtál meg semmit sem ezért {localrandnum}.at írtam be neked");
objectnumber = localrandnum.to_string();
}
let objectnumber: u8 = objectnumber.trim().parse::<u8>().expect("null");

这是工作,但我不认为它应该在Rust中这样做。我不知道为什么即使在空行上也可以,而解析却在谈论它是空的。

修复:

  • read_line返回一个Result,指示是否从stdin读取错误。通常这只发生在非常特殊的情况下,所以现在让我们只unwrap这个。
  • objectnumber.len()给出字符串的长度,而不是它的内容。为了检查< 3的内容,我们需要先将其parse()改为u8
  • 不要expectparse,因为这依赖于用户输入。做一个正确的错误处理。这个点将告诉您数字是>255, <0还是其他数字。现在让我们默认为'0',因为它会被< 3捕获。
  • 不要将thread_rng生成的数字转换为String;相反,把它直接objectnumber。将它转换为字符串并返回是没有意义的。
use std::io;
use rand::{thread_rng, Rng};
fn main() {
let mut objectnumber = String::new();
println!("mennyi súlyt szeretnél megnézni? 3.=255 int");
io::stdin()
.read_line(&mut objectnumber)
.expect("Unable to read from stdin!");
// Convert from String to u8
let mut objectnumber: u8 = objectnumber.trim().parse::<u8>().unwrap_or(0);
if objectnumber < 3 {
objectnumber = thread_rng().gen_range(0..=255);
println!("miután nem adtál meg semmit sem ezért {objectnumber}.at írtam be neked");
}
println!("objectnumber: {}", objectnumber);
}
mennyi súlyt szeretnél megnézni? 3.=255 int
33
objectnumber: 33
mennyi súlyt szeretnél megnézni? 3.=255 int
1
miután nem adtál meg semmit sem ezért 191.at írtam be neked
objectnumber: 191

相关内容

  • 没有找到相关文章

最新更新