为什么无论我输入什么都不打印?

Why doesn't this print nomatter what I input?

我是 Rust 的新手,刚刚了解了命令行的用户输入,我尝试制作这个简单的程序来测试。当我 运行 它时,我没有收到任何错误,但即使我输入“mac”或其他任何内容,它也不会打印任何内容。我想知道为什么会这样,如果有人能解释一下,我将不胜感激。

这是我的代码:

use std::io::{stdin, stdout, Write};

fn main() {
    print!("State your OS: ");
    stdout().flush().expect("Flush Failed!");
    let mut input_string = String::new();
    stdin()
        .read_line(&mut input_string)
        .ok()
        .expect("Failed to read line!");
    if input_string == "mac" {
        println!("Mac");
    } else if input_string == "windows" {
        println!("Windows");
    } else if input_string == "linux" {
        println!("Linux");
    }
}

您输入的字符串末尾有一个换行符。这在 read_line().

的文档中指定

您的问题的一个可能解决方案是 trim 字符串。示例:

use std::io::{stdin, stdout, Write};

fn main() {
    print!("State your OS: ");
    stdout().flush().expect("Flush Failed!");
    let mut input_string = String::new();
    stdin()
        .read_line(&mut input_string)
        .ok()
        .expect("Failed to read line!");
    let s = input_string.trim();    
    if s == "mac" {
        println!("Mac");
    } else if s == "windows" {
        println!("Windows");
    } else if s == "linux" {
        println!("Linux");
    }
}

还有其他可能的方法,但我认为在几乎所有情况下,trim() 用户输入都是一种很好的做法。请注意,您的用户可能会输入 " mac",在这种情况下,您可能希望将输入视为 "mac"