rust
2. Programming a Guessing Game
dodogcat
2023. 1. 11. 00:48
랜덤으로 숫자를 뽑은 뒤 사용자가 값을 넣어서 맞추는 프로그램이다.
역시 아싸 언어라 선택지에 없다.
use std::io;
use std::cmp::Ordering;
// 기본 라이브러리 집합을 prelude라고 부르기도한다?
use rand::Rng;
fn main() {
// println! 특) 메크로임
println!("Guess NUM");
// rand 를 쓰려면 use도 해야 하지만 Cargo.toml에 추가도 해야함
// 버전은 알아서 적당히 관리해줌
let secret_number = rand::thread_rng().gen_range(1..=100);
println!("secret num is {secret_number}");
loop{
println!("input your guess");
// let 으로 변수 선언
// rust는 기본이 immutable로 상수임.
let mut guess = String::new();
// 실패 시 나올거 적어 놔야 함
io::stdin()
.read_line(&mut guess)
.expect("Fail 2 read line");
// parse의 결과를 match를 통해 컨트롤
// parse 는 숫자 바꾸기 : u32 라는 타입으로 바꿈
// trim은 앞 뒤 공백관련 문자들 제거
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
// println!("{}",_);
continue;
},
};
println!("you guess : {guess}");
// cmp의 결과들을 match로 컨트롤
match guess.cmp(&secret_number){
Ordering::Less => println!("too small!"),
Ordering::Greater => println!("too big!"),
Ordering::Equal => {
println!("perpect");
break;
}
}
}
}
println!을 통한 출력에 변수를 넣으려면 2가지 방식이 있다. {} 안에 변수를 명시하거나 뒤에 인자를 던지는 것.
#![allow(unused)]
fn main() {
let x = 5;
let y = 10;
println!("x = {x} and y + 2 = {}", y + 2);
}
이 외에도 match에서 연결되는 것들을 arm이라 부르거나 Err(_)에서 _가 모든 값을 의미한다고 하는데 자세한 설명이 없기 때문에 넘어가겠다.