【问题标题】:How do I match on a string read from standard input? [duplicate]如何匹配从标准输入读取的字符串? [复制]
【发布时间】:2015-10-11 01:09:22
【问题描述】:

在学习 Rust 的练习中,我正在尝试一个简单的程序,该程序将接受您的姓名,然后在有效时打印您的姓名。

只有“Alice”和“Bob”是有效的名字。

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),
    }
}

当我cargo run 这个main.rs 文件时,我得到:

What's your name?
Alice
Invalid name: Alice

现在,我的猜测是,因为“Alice”是&'static str 类型,而name&str 类型,可能匹配不正确...

【问题讨论】:

  • 试试match name.trim() { ... }。我目前无法测试它,但我敢打赌输入中有换行符。
  • 就是这样...我总是忘记这一点,谢谢!如果您发布答案,我会投票并接受。
  • 如果存在类型不匹配,则不会编译。您也可以使用 Debug ({:?}) 而不是 Display ({}) 对其进行格式化,从而准确查看字符串中的内容。

标签: rust


【解决方案1】:

我敢打赌,这不是由类型不匹配引起的。我打赌有一些不可见的字符(在这种情况下是新行)。为了实现你的目标,你应该修剪你的输入字符串:

match name.trim() {
    "Alice" => println!("Your name is Alice"),
    "Bob"   => println!("Your name is Bob"),
    _ => println!("Invalid name: {}", name),
}

【讨论】:

  • A.B.还没有提交答案,所以我会接受你的。
猜你喜欢
  • 2019-05-04
  • 1970-01-01
  • 2012-04-02
  • 2015-03-02
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多