singularity

Chapter 2: Programming a Guessing Game

Receiving User Input

io::stdin().read_line(&mut guess)

Handling Potential Failure with Result

... .expect("Failed to read number");

Generating a Random Number

[dependencies]
rand = "0.9.0"
use rand::Rng;
let secret = rand::thread_rng().gen_range(1..=100);

Comparing the Guess to the Secret Number

match guess.cmp(&secret_number) {
	Ordering::Less => println!("Too small!"),
	Ordering::Greater => println!("Too big!"),
	Ordering::Equal => println!("You win!"),
}

Quitting After a Correct Guess

Ordering::Equal => {
	println!("You Win!");
	break;
}

Handling Invalid Input

match guess.trim().parse() {
	Ok(num) => num,
	Err(err) => {
		println!("{}",err);
		continue;
}

fn ch_2(){
	println!("Guess the number");

	loop {
		println!("Enter number to guess: ");
	
		let mut guess = String::new();

		let secret = rand::thread_rng().gen_range(1..=100);
			
		io::stdin().read_line(&mut guess)
		.expect("Failed to read number");

		if guess.trim().is_empty() {
			println!("bye!");
			break;
		} 
		
		//Shadowing and typecasting
		//trim removes whitespace
		//parse converts to i32
		let guess: i32 = 
			match guess.trim().parse() {
			Ok(num) => num,
			Err(err) => {
				println!("{}",err);
				continue;
			}
		};
		
		println!("You guessed {guess}, secret is {secret}");
		
		match guess.cmp(&secret) {
			Ordering::Less => println!("Too Small!"),
			Ordering::Greater => println!("Too Big!"),
			Ordering::Equal => {
				println!("You Win!");
				break;
			}
		}
	}
}

Guess the number