Rust - 匹配字符串

问题描述 投票:0回答:1

目前我正在尝试学习 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();

}

windows rust rust-cargo
1个回答
0
投票
let _= input.trim_end();

看来您希望

trim_end()
就地改变字符串。但事实并非如此;它需要一个
&str
并返回一个
&str
,它是原始切片,末尾的空格被删除。

所以:

match input.trim_end() {
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.