如何调试Rust代码中if valid条件分支不执行的故障
根因分析
你代码里的核心问题有两个:
enter.trim().to_lowercase()调用没有接收返回值
Rust 的字符串处理方法trim()、to_lowercase()都属于无副作用的纯方法,不会修改原字符串变量,只会返回处理后的新字符串。你当前的写法直接丢弃了处理结果,原enter变量仍然保留了输入末尾的换行符,永远无法和key_list里的无换行元素匹配。- 比较逻辑使用了未处理的原始输入
就算你后续修正了输入处理逻辑,循环中对比的仍然是携带换行符的原始enter变量,也会导致匹配失败。
修复代码
use std::io::stdin; fn main() { println!("Please enter the key"); let mut enter = String::new(); stdin().read_line(&mut enter).expect("invalid key"); // 接收处理后的输入结果 let processed_input = enter.trim().to_lowercase(); let key_list = ["1", "2", "3"]; let mut valid = false; for key in &key_list { // 和处理后的输入对比 if key == &processed_input { valid = true; } } if valid { println!("very nice, {}", processed_input); } else { println!("key is either incorrect or the code for this program sucks, your input is {}", enter.trim()); } }
简化写法
你可以直接用 Rust 切片内置的 contains 方法替代手动循环,代码更简洁:
// 替换valid初始化和整个for循环的代码即可 let valid = key_list.contains(&processed_input.as_str());
内容的提问来源于stack exchange,提问作者user17068379
相关产品推荐
相关产品推荐

