Rust代码报错expected {&unknown}, found String,如何解决字符串比较问题?
Rust字符串比较错误的解决方法
你的代码存在三个问题,直接导致了报错和逻辑异常:
- 类型不匹配:
eq方法要求参数为引用类型(&str或&String),但你直接传入了String类型的word,这就是报错"expected {&unknown}, found String"的核心原因。 - 拼写错误:
except是拼写失误,Rust中正确的错误处理方法是expect。 - 输入累积问题:
read_line会把用户输入(包括换行符)追加到guess中,不主动清空的话,guess内容会越来越长,永远无法和目标字符串匹配。
修正后的代码
use std::io; fn main() { let mut guess = String::new(); let word: String = String::from("Hello, world"); for _ in 1..10 { guess.clear(); // 每次循环清空输入缓冲区 io::stdin() .read_line(&mut guess) .expect("failed to read line"); // 修正拼写错误 // 去除输入末尾的换行符,否则会因多余字符匹配失败 let guess_trimmed = guess.trim(); println!("{}", guess_trimmed == &word); // 用==运算符自动处理引用,更简洁 } println!("Game is over"); }
关键说明
- 使用
==运算符比直接调用eq更直观,Rust会自动处理字符串的引用转换,彻底规避类型不匹配问题。 - 调用
trim()移除输入字符串末尾的换行符(read_line会读取用户按下的回车),否则即使输入内容正确,也会因多余字符匹配失败。 - 每次循环执行
guess.clear()清空之前的输入,确保每次都是新的用户输入参与比较。
内容的提问来源于stack exchange,提问作者paspielka
相关产品推荐
相关产品推荐

