如何将用户输入与特定字符进行比较?

How can I compare a user input to a specific char?

我想将用户输入与 Rust 中的特定字符进行比较。 例如,我会打印类似这样的内容:“按“q”退出”,用户应输入字母“q”并按 Enter 退出程序。 如果输入超过 1 个字符,程序应该打印类似:“not valid”的内容。 我发现在 Linux 上,实际输入看起来像这样:“q\n”,在 windows 上像这样:“q\r\n” 所以我得到了以下代码:

println!("Enter "q" to quit");

let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read input");

let input_bytes = input.as_bytes()[0];
let quit: [u8; 1] = *b"q";

if input_bytes.eq(&quit[0]) {
    std::process::exit(0);
}

只读取第一个字节。 它有效,但不检查输入的长度。所以任何以“q”开头的都可以。

我找不到这方面的解决方案,现在我正在寻找几天。也许我在搜索引擎上问错了问题。我不是专家,感谢您的帮助。

您应该首先 trim 您的字符串删除空格,然后比较整个字符串,而不是只抓取第一个字节。然后,matchif 语句可以根据输入决定您的程序应如何继续。

fn main() {
    println!("Enter \"q\" to quit");

    loop {
        let mut input = String::new();
        std::io::stdin().read_line(&mut input).expect("Failed to read input");

        match input.trim() {
            "q" => std::process::exit(0),
            _ => println!("keep going"),
        }
    }
}