用户从键盘输入的信息要怎么显示,我们通过解读下面一段代码,来帮助提高对rust的熟悉度
use std::io::stdin;
fn main() {
println!("Hello, what's your name?");
let mut your_name = String::new();
stdin()
.read_line(&mut your_name)
.expect("Failed to real line!");
println!("Hello, {}", your_name);
}
程序执行结果:
Hello, what's your name?
hzh
Hello, hzh
- rust的标准输入系统提供了接受键盘输入的功能, 我们需要在代码中这样引入
use std::io::stdin;之后使用时,就可以不再输入冗长的前缀,而直接使用stdin - 还需要定义一个mutable变量,来存储用户的输入内容,上例中,我们使用
mut关键字创建了your_name变量,以备使用 - 接下来是一段 function chaining 函数链, 这种写法也是
cargo fmt推荐的格式,每一行都是一个独立步骤,阅读起来很清晰(在数据处理领域,目前也经常看到这种代码书写风格,比如python pandas数据处理过程中,也会看到chaining的写法)
这段函数链的具体解释如下图:
将获取用户输入的代码封装为一个函数,以便后续重复使用:
use std::io::stdin;
fn what_is_your_name() -> String {
let mut your_name = String::new();
stdin()
.read_line(&mut your_name)
.expect("Failed to real line!");
your_name
}
fn main() {
println!("Hello, what's your name?");
let name = what_is_your_name();
println!("Hello, {:?}", name); // 使用了debug占位符,任何支持debug打印的类型都会输出更详细的内容
}
程序执行结果:
Hello, what's your name?
hzh
Hello, "hzh\n"
// 输出结果有问题,在本机Mac OS操作系统上,输入的其实是 名字+\n
// 如果是windows操作系统上,输入的会是 名字+\r\n
对上述代码进一步改进,将敲入Enter键之后导致的\n字符去掉,顺便把用户的输入转为小写
use std::io::stdin;
fn what_is_your_name() -> String {
let mut your_name = String::new();
stdin()
.read_line(&mut your_name)
.expect("Failed to real line!");
your_name.trim().to_lowercase()
}
fn main() {
println!("Hello, what's your name?");
let name = what_is_your_name();
println!("Hello, {:?}", name);
}
程序执行结果:
Hello, what's your name?
hzh
Hello, "hzh"