2015-09-19 2 views
-2

проблема угадывать игрыугадайку в Русте 1.3.0

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!"), 
    } 
} 

Но это дает мне ошибку:

src\main.rs:26:21: 26:35 error: mismatched types: 
expected `&collections::string::String`, 
    found `&_` 
(expected struct `collections::string::String`, 
    found integral variable) [E0308] 
src\main.rs:26  match guess.cmp(&secret_number) { 
            ^~~~~~~~~~~~~~ 

Что вызывает это, и как я могу это исправить?

+4

Вы сравниваете строку с целым числом. – Veedrac

+8

Просто прочитайте [документацию] (http://doc.rust-lang.org/book/guessing-game.html) для ** еще одного абзаца **, и это объясняется: * Whew! Это большая ошибка. Суть его в том, что у нас «несоответствующие типы». * – Shepmaster

ответ

0

Пользователь вводит stdin является строкой. Пока номер, который вы получили от rand, находится в u32. Попробуйте использовать to_string на secret_number.

match guess.cmp(&secret_number.to_string())

Смежные вопросы