Skip to content
Snippets Groups Projects
Select Git revision
  • 0535a63803b92fe41bb3ecf269d044bef573f712
  • master default protected
  • 2f
  • 2e
  • 2d
  • 2c
  • 2b
  • 2a
8 results

main.rs

Blame
  • main.rs 1.80 KiB
    extern crate rand;
    
    use std::io;
    use std::vec::Vec;
    use std::cmp::Ordering;
    use rand::Rng;
    
    fn main() {
        println!("Guess the number!");
    
        let secret_number = rand::thread_rng().gen_range(1, 101);
    
        let mut tries_counter : u32 = 0; 
        let mut attempt_history = Vec::<(u32, String)>::new();
    
        //println!("The secret number is: {}", secret_number);
    
        loop {
    
            // Get the value from inside the Ok, else print the error
            let guess = match get_input() {
                Ok(num) => num,
                Err(e) => {
                    println!("{}", e);
                    continue;
                }
            };
    
    
            println!("You guessed: {}", guess);
    
            tries_counter += 1;
    
            attempt_history.push((tries_counter, format!("{}", guess)));
    
            match guess.cmp(&secret_number) {
                Ordering::Less    => println!("Too small!"),
                Ordering::Greater => println!("Too big!"),
                Ordering::Equal   => {
                    println!("You win!");
                    println!("Total number of attempts: {}", tries_counter);
                    for x in attempt_history.iter() {
                        println!("{:?}", x);
                    }
                    break;
                }
            }
    
            println!("Attempts so far: {}\n ", tries_counter);
    
        }
    }
    
    
    fn get_input() -> Result<u32, String> {
    
        let mut text_input = String::new();
    
        println!("Please input your guess.");
    
        /*
         Instead of using the expect,
         save and return potential error
         */
            let input = io::stdin()
            .read_line(&mut text_input);
        
        match input {
            Ok(_) => (),
            Err(e) => return Err(format!("{}", e)),
        }
    
        match text_input.trim().parse::<u32>() {
            Ok(num) => return Ok(num),
            Err(e) => {
                return Err(format!("in parsing u32, {}", e));
            }
        };
    }