Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I match on a string read from standard input? [duplicate]

Tags:

rust

In an exercise to learn Rust, I'm trying a simple program that will accept your name, then print your name if it's Valid.

Only "Alice" and "Bob" are valid names.

use std::io;

fn main() {
    println!("What's your name?");
    let mut name = String::new();

    io::stdin().read_line(&mut name)
    .ok()
    .expect("Failed to read line");

    greet(&name);
}

fn greet(name: &str) {
    match name {
        "Alice" => println!("Your name is Alice"),
        "Bob"   => println!("Your name is Bob"),
        _ => println!("Invalid name: {}", name),
    }
}

When I cargo run this main.rs file, I get:

What's your name?
Alice
Invalid name: Alice

Now, my guess is, because "Alice" is of type &'static str and name is of type &str, maybe it's not matching correctly...

like image 309
ddavison Avatar asked Jul 21 '15 14:07

ddavison


1 Answers

I bet that it isn't caused by type mismatch. I place my bet on that there are some invisible characters (new line in this case). To achieve your goal you should trim your input string:

match name.trim() {
    "Alice" => println!("Your name is Alice"),
    "Bob"   => println!("Your name is Bob"),
    _ => println!("Invalid name: {}", name),
}
like image 173
Hauleth Avatar answered Nov 01 '22 11:11

Hauleth