for-loop - Rust 正在跳过 for 循环
问题描述
我对 rust 很陌生,只是想制作一个刽子手游戏来帮助我学习语言。我做了一个 for 循环来检查我输入的字符是否在我猜到的所有过去字符的向量中。但是当运行它时,它只是不断地再次询问字母,在通过调试器之后它完全跳过了 for 循环。
我正在使用带有 lldb 的 vscode 进行调试。
任何人都可以伸出援助之手向我解释或帮助我弄清楚为什么它不起作用。
use rand::random;
fn take_input(pre_guessed: &mut std::vec::Vec<char>) -> char{
let mut run = true;
print!("Enter letter: ");
let mut temp_guess = String::new();
let guess_char = match std::io::stdin().read_line(&mut temp_guess){
Ok(_) => temp_guess.chars().next().expect("Could not convert guess to char"),
Err(_) => '>'
};
println!();
for i in pre_guessed.iter(){ // THIS IS THE FOR LOOP THAT IS SKIPPED OVER
if *i == guess_char{
run = false;
}
}
if run == false{
pre_guessed.push(guess_char);
guess_char
} else {
take_input(pre_guessed)
}
}
fn get_word() -> String {
// goes to a text file and gets a word
}
fn check_correct(guessed_vec: &std::vec::Vec<char>) -> bool{
let mut complete = true;
for i in guessed_vec.iter(){
if *i == '-'{
complete = false;
}
}
complete
}
fn main() {
let word_to_guess = get_word();
println!("{}", word_to_guess);
let mut encoded_word = vec!['-'; word_to_guess.len()];
let mut guessed = false;
let mut guessed_letters: std::vec::Vec<char> = Vec::new();
let mut wrong_letters: std::vec::Vec<char> = Vec::new();
while guessed == false{
println!("Guessed letters: {:?}", wrong_letters);
for i in encoded_word.iter(){
print!("{}", i);
}
println!();
let guess = take_input(&mut guessed_letters);
let mut temp_count = 0;
let mut temp_match = false;
for i in word_to_guess.chars(){
if guess == i{
encoded_word[temp_count] = i;
temp_match = true
}
temp_count += 1;
}
if temp_match == false{
wrong_letters.push(guess);
}
guessed = check_correct(&guessed_letters)
}
}
解决方案
guessed_letters
开始为空。唯一增加它的是
pre_guessed.push(guess_char)
whenrun == false
。run
开始true
。唯一将其设置为
false
的时间是(即)的*i == guess_char
任何元素。i
pre_guessed
guessed_letters
guessed_letters
只有在run
为假时才能变为非空,只有在非空时run
才能变为假guessed_letters
。
看起来你的意思是:
if run { // no == false
pre_guessed.push(guess_char);
guess_char
} else {
take_input(pre_guessed)
}
推荐阅读
- amazon-web-services - AWS:ALB 立即或 130 秒后响应
- xaml - 在 Xamarin.Forms 中使用 FlexLayout 将 UI 元素“相互叠加”
- java - 数字选择器从相反方向增加数字
- scala - 光滑的过滤器 nscala-time DateTime 通过 GreaterEqual 或 smallEqual
- javascript - 如何在同一个下拉列表中创建多个下拉列表。
- php - 致命错误:未捕获错误:调用 C:\xampp\htdocs\phpmvc\app\models\Mahasiswa_model.php:31 中的未定义函数 query()
- php - 用 ajax 更新而不是替换 wordpress 自定义字段
- .net - Visual Studio 测试资源管理器 XUnit 问题
- javascript - 如何在 Node.js 中创建 Blob?
- amazon-web-services - Kubernetes 多服务冲突