为什么我的用户inputstdin不能正确匹配?
我试图得到系统input,并检查用户是否放入是或否。 我在做我的string转换错误或什么? 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 } }
read_line
在返回的string中包含终止换行符。 将.trim_right_matches("\r\n")
到您的correct_name
定义中,以删除终止换行符。
而不是trim_right_matches
,我build议使用trim_right
或甚至更好,只是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!"); // Do something } else if correct_name.trim() == "n" { println!("matched n!"); // Do something else } }
这最后一个案例处理大量的空白:
返回删除了前导空白和尾随空白的string片段。
“空白”是根据Unicode派生核心属性White_Space的术语定义的。
所以Windows / Linux / OS X应该不重要。
你可以使用chomp-nl
crate ,它提供了一个chomp
函数 ,它返回一个没有换行符的string切片。
ChompInPlace
还有一个特点,如果你喜欢这样做的话。
免责声明:我是这个图书馆的作者。