Why does my string not match when reading user input from stdin?

前端 未结 3 1612
借酒劲吻你
借酒劲吻你 2020-11-22 12:34

I\'m trying to get user input and check if the user put in \"y\" or \"n\". Surprisingly, in the below code, neither the if nor the if else case exe

3条回答
  •  隐瞒了意图╮
    2020-11-22 13:09

    Instead of trim_right_matches, I'd recommend using trim_right or even better, just trim:

    use std::io;
    
    fn main() {
        let mut correct_name = String::new();
        io::stdin().read_line(&mut correct_name).expect("Failed to read line");
    
        let correct_name = correct_name.trim();
    
        if correct_name == "y" {
            println!("matched y!");
        } else if correct_name.trim() == "n" {
            println!("matched n!");
        }
    }
    

    This last case handles lots of types of whitespace:

    Returns a string slice with leading and trailing whitespace removed.

    'Whitespace' is defined according to the terms of the Unicode Derived Core Property White_Space.

    So Windows / Linux / macOS shouldn't matter.


    You could also use the trimmed result's length to truncate the original String, but in this case you should only use trim_right!

    let trimmed_len = correct_name.trim_right().len();
    correct_name.truncate(trimmed_len);
    

提交回复
热议问题