目前我正在尝试学习 Rust。 我想创建一个非常小且简单的待办事项列表,但在将用户输入与不同选项相匹配时遇到一些问题。
我已经尝试了互联网上的不同解决方案,但程序总是以我的代码的“不匹配”分支结束:
use std::io::{self, stdin};
fn main() {
let mut todo = Vec::new();
println!("--TODO LIST--");
println!("");
println!("1. Show List");
println!("2. Add to list");
println!("3. Remove from list");
let mut input = String::new();
let mut add = String::new();
stdin().read_line(&mut input).expect("cannot readline");
let mut i = 0;
let _= input.trim_end();
//println!();
//println!("{}", input);
match input.as_str() {
"1" => {
while i <= todo.len() {
print!("{}. {}", i, todo[i]);
i += 1;
}
},
"2" => {
println!("What do you want to add?");
io::stdin().read_line(&mut add).expect("Invalid answer");
todo.push( add);
},
"3" => {
println!("What do you want to remove (number)");
io::stdin().read_line(&mut add).expect("Invalid answer");
let my_int = add.parse::<usize>().unwrap();
todo.remove(my_int);
},
_=> {
println!("No Match");
main();
},
};
main();
}
let _= input.trim_end();
trim_end()
就地改变字符串。但事实并非如此;它需要一个 &str
并返回一个 &str
,它是原始切片,末尾的空格被删除。
所以:
match input.trim_end() {
// ...
}