将字符串与Hangman项目中的char进行比较时的编译错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串与Hangman项目中的char进行比较时的编译错误相关的知识,希望对你有一定的参考价值。

我正在尝试制作一个刽子手游戏:

use std::io::stdin;

fn main() {
    let mut isRunning: bool = true;

    'outer: loop {
        let w1 = vec!['m', 'o', 'm', 'm', 'y']; //the answer
        println!("Guess a Character");

        loop {
            let mut line = String::new(); //the guess

            let input = stdin().read_line(&mut line);
            let char_vec: Vec<char> = line.to_string().chars().collect();

            for x in 0..4 {
                if line == w1[x] {
                    println!("you guessed right? ");
                }
            }
        }
    }
}

将用户输入与单词中的字母进行比较时,出现编译错误:

error[E0277]: the trait bound `std::string::String: std::cmp::PartialEq<char>` is not satisfied
  --> src/main.rs:17:25
   |
17 |                 if line == w1[x] {
   |                         ^^ can't compare `std::string::String` with `char`
   |
   = help: the trait `std::cmp::PartialEq<char>` is not implemented for `std::string::String`

为什么这不能按预期工作?

答案

这是错误消息的关键部分:

can't compare `std::string::String` with `char`

问题是你将用户输入存储为String,但试图将其与char进行比较。有几种解决方案。也许最简单的是使用来自用户输入char的第一个String

use std::io::stdin;

fn main() {
    'outer: loop {
        let w1 = vec!['m', 'o', 'm', 'm', 'y']; //the answer
        println!("Guess a Character");

        loop {
            let mut line = String::new(); //the guess

            stdin().read_line(&mut line).unwrap();
            if line.len() < 1 || line.len() > 1 {
                println!("Please guess a single char.");
            } else {
                let guess = line.chars().next().unwrap();
                let mut correct = false;
                for c in &w1 {
                    if guess == *c {
                        correct = true;
                        break;
                    }
                }
                if correct {
                    println!("You guessd right!");
                } else {
                    println!("You guessed wrong...");
                }
            }
        }
    }
}

以上是关于将字符串与Hangman项目中的char进行比较时的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将char数组中的值与另一个char进行比较

将 const char 与字符串进行比较

Scanf 在循环中跳过(Hangman)

将keypressed与char进行比较

将迭代字符串与单字符字符串进行比较

将指针与C ++中的字节进行比较(Arduino)