Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rust book, guessing game mismatched types

Tags:

rust

I'm following the rust book tutorial for 1.1.0, but trying to run their code I'm getting 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!"),
    }
}

upon running 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 copy pasted from the tutorial, what's wrong?

like image 371
Syntactic Fructose Avatar asked Jun 26 '15 16:06

Syntactic Fructose


2 Answers

Nothing is wrong. The tutorial actually explains why this won't compile:

I did mention that this won’t quite work yet, though. Let’s try it: ... Whew! This is a big error. The core of it is that we have ‘mismatched types’. Rust has a strong, static type system.

like image 110
bedwyr Avatar answered Nov 22 '22 04:11

bedwyr


You are trying to compare string and integer. You need to cast user input to integer first.

Add this line to your code and it should work:

let guess: u32 = guess.trim().parse().unwrap();
like image 36
evilone Avatar answered Nov 22 '22 05:11

evilone