为什么我的用户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还有一个特点,如果你喜欢这样做的话。

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