Rust-- 获取用户的输入

2,017 阅读2分钟

用户从键盘输入的信息要怎么显示,我们通过解读下面一段代码,来帮助提高对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的写法)

这段函数链的具体解释如下图:

截屏2022-10-05 下午3.36.59.png

将获取用户输入的代码封装为一个函数,以便后续重复使用:

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"