你可以拨打str::parse()
,但你需要确保read_line
正常工作.我们需要一个读者:
use std::io;
fn main() {
let reader = io::stdin();
}
stdin
读取处理输入流的全局缓冲区,还实现了BufRead
trait,其中包含read_line
method方法.这将可变String
作为输入缓冲区,从流中读取所有字节,直到到达换行字节并将它们附加到缓冲区.#expect()
方法打开Result
;如果是Err
,它会对信息和原因感到panic .
use std::io;
fn main() {
let reader = io::stdin();
let mut input_text = String::new();
reader.read_line(&mut input_text).expect("failed to read line");
}
我们现在有了要转换成i32
的输入文本.这就是str::parse()
将为我们工作的地方,只要我们给它一个要解析的类型.str::trim()
是必需的,因为read_line
包含缓冲区中的换行字节
use std::io;
fn main() {
let reader = io::stdin();
let mut input_text = String::new();
reader.read_line(&mut input_text).expect("failed to read line");
let input = input_text.trim().parse::<i32>();
}
我们还没有完成,我们仍然需要确保使用模式匹配成功解析输入.将原始输入缓冲区转换为可用整数所需的所有代码如下:
use std::io;
fn main() {
let reader = io::stdin();
let mut input_text = String::new();
reader.read_line(&mut input_text).expect("failed to read line");
let input_opt = input_text.trim().parse::<i32>();
let input_int = match input_opt {
Ok(input_int) => input_int,
Err(e) => {
println!("please input a number ({})", e);
return;
}
};
println!("{}", input_int);
}
这样编译时不会出现错误或警告.