complete section 1, guessing game
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
// We import io from the standard library
|
||||
// It is like stdin stdout stderr and all that
|
||||
use std::cmp::Ordering;
|
||||
use std::io;
|
||||
|
||||
use rand::Rng;
|
||||
|
||||
// Main entry point of application
|
||||
fn main() {
|
||||
// Use the println! macro to print to stdout
|
||||
println!("Guess the number!");
|
||||
|
||||
let secret_number = rand::thread_rng().gen_range(1..=100);
|
||||
|
||||
println!("Please input your guess.");
|
||||
|
||||
// here we start the while ish loop
|
||||
loop {
|
||||
// uncomment the next line if you want to see the secret number as stdout
|
||||
// println!("The secret number is {secret_number}");
|
||||
|
||||
// declare a mutable variable which is a growable empty string
|
||||
let mut guess = String::new();
|
||||
|
||||
// from io in the std lib use stdin as input to app
|
||||
// use read_line to read the input and stores it in a reference to the mutable variable guess
|
||||
// Then expect is used as err handling, if something goes wrong, write to stderr and quit
|
||||
// program with 1
|
||||
io::stdin()
|
||||
.read_line(&mut guess)
|
||||
.expect("failed to read line");
|
||||
|
||||
// In rust, when converting types, you usually use the same var name, instead of doing something
|
||||
// like let guess_int and let guess_str.
|
||||
// here we define guess as unsigned 32 bit int, we reuse the guess variable, then we do a trim
|
||||
// of it, because user input can contain 4\n which would cause it to fail always, as it cannot
|
||||
// be parsed to an int. The parse step knows that it should parse it to the defined u32 data type.
|
||||
// The expect has the result of either error or ok, and terminates the program if not valid
|
||||
// integer.
|
||||
// So here the expect is exchanged with match and pattern matching with the two result
|
||||
// values, "Ok" and "Err". This is for gracefull err handling and starting the while loop
|
||||
// again, even if you enter something invalid.
|
||||
// Parse returns Result as mentioned above, but also "num" which is the Ok number
|
||||
let guess: u32 = match guess.trim().parse() {
|
||||
Ok(num) => num,
|
||||
Err(_) => continue,
|
||||
};
|
||||
|
||||
// print the user input with extrapolated guess variable in {} brackets
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user