The book of rust, a guessing game of mismatched types

I am following a rust tutorial for version 1.1.0, but trying to run my code, I get an error.

I have the following:

extern crate rand; use std::io; use std::cmp::Ordering; use rand::Rng; fn main() { println!("Guess the number!"); let secret_number = rand::thread_rng().gen_range(1, 101); println!("The secret number is: {}", secret_number); println!("Please input your guess."); let mut guess = String::new(); io::stdin().read_line(&mut guess) .ok() .expect("failed to read line"); println!("You guessed: {}", guess); match guess.cmp(&secret_number) { Ordering::Less => println!("Too small!"), Ordering::Greater => println!("Too big!"), Ordering::Equal => println!("You win!"), } } 

when doing this i get

 src/main.rs:24:21: 24:35 error: mismatched types: expected `&collections::string::String`, found `&_` (expected struct `collections::string::String`, found integral variable) [E0308] src/main.rs:24 match guess.cmp(&secret_number) { ^~~~~~~~~~~~~~ src/main.rs:24:21: 24:35 help: run `rustc --explain E0308` to see a detailed explanation 

This code is directly copied from the tutorial, what's wrong?

+6
source share
2 answers

There is nothing bad. The tutorial actually explains why this does not compile:

I mentioned that this is not working yet. Let's try: ... Phew! This is a big mistake. Its essence is that we have "inappropriate types." Rust is a strong static type system.

+12
source

You are trying to compare a string and an integer. First you need to enter user input in an integer.

Add this line to your code and it should work:

 let guess: u32 = guess.trim().parse().unwrap(); 
+1
source

Source: https://habr.com/ru/post/989825/


All Articles