如何将用户输入与特定字符进行比较?
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 您的字符串删除空格,然后比较整个字符串,而不是只抓取第一个字节。然后,match
或 if
语句可以根据输入决定您的程序应如何继续。
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"),
}
}
}
我想将用户输入与 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 您的字符串删除空格,然后比较整个字符串,而不是只抓取第一个字节。然后,match
或 if
语句可以根据输入决定您的程序应如何继续。
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"),
}
}
}