为什么我的stdin用户输入没有正确匹配?

时间:2015-01-05 04:12:26

标签: rust

我试图获取系统输入并检查用户是否输入了是或否。我的字符串转换是错误还是什么? if块不会执行。

use std::io;

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

3 个答案:

答案 0 :(得分:12)

我建议使用trim_right_matches或更好,而不是trim_right,而不是trim

dim rw as variant
with worksheets("Sheet1")
    rw = application.match(<value_to_find>, .columns(1), 0)  'column A
    if iserror(rw) then
        'not found - rw is a worksheet error code
    else
        'found - rw is a long integer representing the row number
    end if
end with

最后一种情况处理许多类型的空白:

  

返回删除了前导和尾随空格的字符串切片。

     

'Whitespace'是根据Unicode派生核心属性White_Space的术语定义的。

所以Windows / Linux / macOS无关紧要。

您还可以使用修剪结果的长度来截断原始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!"); // Do something } else if correct_name.trim() == "n" { println!("matched n!"); // Do something else } } ,但在这种情况下,您应该只使用String

trim_right

答案 1 :(得分:8)

read_line包含返回字符串中的终止换行符。将.trim_right_matches("\r\n")添加到correct_name的定义中,以删除终止换行符。

答案 2 :(得分:2)

您可以使用提供chomp-nl cratechomp function,它返回不带换行符的字符串切片。

如果您希望就地执行此操作,还有一个trait ChompInPlace

免责声明:我是这个图书馆的作者。