# Learning something new : RUST lang PART 23 min read

The second part is creating a guessing game in rust.

From the book this is what is going to happen.

We’ll implement a classic beginner programming problem: a guessing game. Here’s how it works: the program will generate a random integer between 1 and 100. It will then prompt the player to enter a guess. After entering a guess, it will indicate whether the guess is too low or too high. If the guess is correct, the game will print congratulations and exit.

I tried to create a simple guessing game myself before looking at this. The program would ask the user for a number between 0 and 10.  If the input is equal to a random number generated by the program, the user wins.

But I needed to know

• How to create a random number in rust within a given range/
• How to get input from user.
• How to convert the input string to an integer.

After a lot of google search and trial and error, I finally succeeded.

### Random number generation

Using this package or what is known as crate in rust.

https://doc.rust-lang.org/rand/rand/index.html

Added this to the Cargo.toml file.

```[dependencies]
rand = "0.3"```

And the code –

```extern crate rand;
use rand::Rng;

fn main() {
}```

### Getting input from user

```use std::io;

fn main() {
let stdin = io::stdin();
let mut line = String::new();
}
```

Its done through the standard io (std::io) library.

#### Now what is that after the let keyword?

From what I understand, if you do not add mut after the let keyword, you are declaring a constant, but if you add mut its a variable.

If you are passing something by reference  like in

If the function changes the value of the passed paramenter you should add &mut.

Examples –

```fn main() {
let a = 1;
a = 5; //(Error: re-assignment of immutable variable)
}```
```fn main() {
let mut a = 1;
a = 5; //(No error)
}```

#### .unwrap()

If there is and error, it would throw the error and exit the program.

### Converting a string to an integer

```use std::io;

fn main() {
let stdin = io::stdin();
let mut line = String::new();
let mut num: i32;
num = line.trim().parse().unwrap();
println!("The number is {}", num);
}```

Note – Not error handled, because I have no idea how to do it yet.

So, from what I found

• you can declare and integer variable at top and set it value to string.parse() or
• Use
`let num  = line.trim().parse::<i32>();`

and check for errors.

At last it is done

```use std::io;
extern crate rand;
use rand::Rng;

fn main() {
//Generate a random number

println!("Guess a number");

let stdin = io::stdin();
let mut guess: i32;

while ( true ){
let mut line = String::new();

//get user input

//Parse input string to integer
//Not error handled
guess = line.trim().parse().unwrap();

//If the guess is correct exit the loop
if( guess == num ){
println!("Correct the number was {}", guess);
break;
}
else{
println!("Wrong. Not {}", guess);
}
}

}```