我学到了一点生锈,通常在我的代码中,我喜欢实现一个函数,它循环用户输入直到它是正确的,但在这种情况下,它不工作,我不知道为什么。我尝试过一个名为is_ok()的方法,但这总是返回false。代码如下
use std::io;
macro_rules! input {() => {{
let mut it = String::new();
loop {
io::stdin().read_line(&mut it).expect("Failed to read input");
if (it.trim().parse::<i16>().is_ok()) {break}
else {println!("Error: Different Type convertion");}
}
it.trim().parse().expect("please give me correct string number!")
}}}
fn main () {
println!("Enter any number: ");
let my_num: i16 = input!();
println!("Entered number is {}", my_num);
println!("Enter any other number: ");
let mut a: i16 = input!();
println!("Entered number is {}", a);
a += my_num;
println!("The sum of two numbers is {}", a);
}发布于 2022-08-16 17:50:51
来自read_line() documentation (重点雷):
锁定这个句柄并读取一行输入,将其附加到指定的缓冲区中。
因此,如果您输入了一些无效的内容,它就会停留在那里,解析就会失败。
每次调用read_line()或创建新字符串之前,先对字符串进行clear()。
https://stackoverflow.com/questions/73378118
复制相似问题