🚀
1. Intro

Introduction

fn main() {
    println!("Guess the number!");
    println!("Please input your guess.");
 
    let guess = String::new();
}
  • new() is an associative function, other languages call it static methods

  • In Rust, variable are immutable by default

fn main() {
    println!("Guess the number!");
    println!("Please input your guess.");
 
    let mut guess = String::new();
}
  • mut makes this variable mutable

Using IO

use std::io;
 
fn main() {
    println!("Guess the number!");
    println!("Please input your guess.");
 
    let mut guess = String::new();
 
     io::stdin().read_line(&mut guess)
        .expect("Failed to read line");
 
	println!("You guessed: {}", guess);
}
  • pub fn read_line(&self, buf: &mut String) -> io::Result<usize> will take user's input, append it to the specified buffer
  • Result -> enum Result<T, E> { Ok(T), Err(E) }
$ cargo run
 
Guess the number!
Please input your guess.
22
You guessed: 22

Using rand Package

  • Using the rand package to generate random numbers
use std::io;
use rand::Rng;
 
fn main() {
    println!("Guess the number!");
 
   let secret_number = rand::thread_rng().gen_range(1..=101);
 
    println!("Please input your guess.");
 
    let mut guess = String::new();
 
     io::stdin().read_line(&mut guess)
        .expect("Failed to read line");
 
	println!("You guessed: {}", guess);
}
  • use rand::Rng , imports the Rng trait from the rand crate into the current scope.

Comparing Variables

Comparing variables

  • pub enum Ordering { Less, Equal, Greater }
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 = String::new();
 
    io::stdin().read_line(&mut guess)
        .expect("Failed to read line");
 
    let guess: u32 = guess.trim().parse().expect( "Please type a number!");
 
    println!("You guessed: {}", guess);
 
    match guess.cmp(&secret_number) {
        Ordering::Less => println!("Too small!"),
        Ordering::Greater => println!("Too big!"),
        Ordering::Equal => println!("You win!"),
    };
}
  • guess variable is declared twice, i.e. called Shadowing (specially used in converting type of variables, but preserving the same variable name)

Match Expression

  • fn cmp(&self, other: &u32) -> Ordering , handling the return type of Ordering using Match Expression
$ cargo run
 
Guess the number!
The secret number is: 71
Please input your guess.
51
You guessed: 51
Too small!

Loops

use rand::Rng;
use std::cmp::Ordering;
use std::io;
 
fn main() {
    println!("Guess the number!");
 
    let secret_number = rand::thread_rng().gen_range(1..=101);
 
    println!("The secret number is: {}", secret_number);
 
    loop {
        println!("Please input your guess.");
 
        let mut guess: String = String::new();
 
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");
 
        let guess: u32 = guess.trim().parse().expect("Please type a number!");
 
        println!("You guessed: {}", guess);
 
		match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            },
        };
    }
}
️🐞

Bug: Error when user inputs string type

$ cargo run
 
Guess the number!
The secret number is: 67
Please input your guess.
drip
thread 'main' panicked at src/main.rs:21:47:
Please type a number!: ParseIntError { kind: InvalidDigit }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\guessing-game.exe` (exit code: 101)

Exception Handling

  • parse function looks something like fn parse<F>(&self) -> Result<F, F::Err>
  • Using match expression to catch the error
use rand::Rng;
use std::cmp::Ordering;
use std::io;
 
fn main() {
    println!("Guess the number!");
 
    let secret_number = rand::thread_rng().gen_range(1..=101);
 
    println!("The secret number is: {}", secret_number);
 
    loop {
        println!("Please input your guess.");
 
        let mut guess: String = String::new();
 
        io::stdin()
            .read_line(&mut guess)
            .expect("Failed to read line");
 
        let guess: u32 = match guess.trim().parse() {
            Ok(num) => num,
            Err(_) => {
                println!("Please enter a number.");
                continue;
            },
        };
 
        println!("You guessed: {}", guess);
 
        match guess.cmp(&secret_number) {
            Ordering::Less => println!("Too small!"),
            Ordering::Greater => println!("Too big!"),
            Ordering::Equal => {
                println!("You win!");
                break;
            },
        };
    }
}

© 2024 Driptanil Datta.All rights reserved

Made with Love ❤️

Last updated on Mon Oct 20 2025