Rust开发疑问:猜拳游戏菜单输入的模式匹配不生效怎么办?
问题原因与解决方案
问题根源
io::stdin().read_line(&mut choix) 会将用户输入的内容**连同末尾的换行符(\n)**一并读取到变量中。比如输入singleplayer并回车后,choix的实际值是"singleplayer\n",转小写后依然带有换行符,因此无法匹配"singleplayer"字面量,触发默认分支。
修复方法
在处理输入字符串时,先去除首尾的空白字符(包括换行符),再进行转小写和匹配操作。修改后的代码如下:
io::stdin() .read_line(&mut choix) .expect("Failed to read line"); // 先去除首尾空白,再转小写 choix = choix.trim().to_lowercase(); match choix.as_str() { "singleplayer" => singleplayer(), "multiplayer" => multiplayer(), _ => println!("Unknown choice, please choose 'singleplayer' or 'multiplayer'"), } println!("End of game");
补充说明
trim()方法会移除字符串首尾所有空白字符(包括空格、制表符、换行符),能同时处理用户误输入前后空格的情况。- 如果只想针对性去除末尾的换行符,也可以使用
trim_end()或trim_matches('\n'),但trim()的通用性更强。
内容的提问来源于stack exchange,提问作者DreadFog
相关产品推荐
相关产品推荐

