diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..24d904b54485b742a1d2ebd8f027b093a011fac7 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,71 @@ +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); + + let mut tries_counter : u32 = 0; + + //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; + + 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); + 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)); + } + }; +} \ No newline at end of file