Rust

[2 - 1] Rust 간단한 숫자 맞추기 게임

초코민트냠냠 2022. 9. 30. 13:57
반응형

Rust의 구체적인 내용을 배우기 전에 몸풀기로 간단한 숫자 맞추기 게임을 만들어보고 시작하겠습니다.

 

이 게임은 콘솔로 숫자를 입력받고 입력받은 숫자가 맞춰야 될 숫자에 비해서 큰지 작은지를 알려줍니다.

맞춰야 할 숫자의 범위는 1~100 사이의 정수입니다.

횟수 제한이 없으면 재미 없으니까 7번의 제한을 두겠습니다!

 

 

 

새로운 프로젝트 만들기

 

프로젝트 디렉토리로 가서 터미널에 다음 명령어를 입력합니다.

 

cargo new guessing_game

 

생성된 guessing_game디렉토리를 vscode로 엽니다.

src/main.rs를 확인해보면 "Hello World"를 출력하는 프로그램이 있습니다.

 

fn main() {
    println!("Hello, world!");
}

(tistory 코드작성기에 Rust가 없네요... C++로 설정하고 작성합니다. 2022.09.30.)

 

 

이제 터미널에 cargo run을 입력하여 컴파일하고 실행해봅니다. 

 

Hello, world!

준비가 완료 되었으니 다음으로 넘어갑니다.

 

 

 

사용자로부터 숫자 입력받기

 

src/main.rs에 다음 코드를 작성해주세요.

 

use std::io;

fn main() {
    println!("==== 숫자 맞추기 게임! ====");

    println!("숫자를 입력해주세요.");

    let mut guess = String::new();

    io::stdin()
        .read_line(&mut guess)
        .expect("입력받지 못했습니다.");

    println!("당신의 예측: {}", guess);
}

 

첫 번째 줄 부터 살펴보겠습니다.

 

use std::io

 

C언어의 #include<stdio.h> 와 같이 use std::io는 인풋 아웃풋과 관련된 기능을 제공합니다.

 

 

변수 선언

다음 코드는 사용자의 입력값을 저장할 수 있는 변수를 생성합니다.

 

let mut guess = String::new();

 

let 키워드는 변수를 선언합니다. 그 뒤에 있는 mut은 guess를 변경 가능한 변수로 만듭니다.

만약 let guess로 변수를 선언한다면 guess를 수정할 수 없게 됩니다.

 

let x = 5; // 변경 불가능
let mut y = 5; // 변경 가능

 

코드를 다시 보면 guess 변수는 String::new()의 결과값인 새로운 String 인스턴스가 bind됩니다.

 

::new에 있는 ::newString 타입의 associated function(연관 함수) 임을 알려줍니다.

여기서 new는 비어있는 새로운 문자열을 만들어줍니다.

 

한줄로 말하면 이 코드는 빈 문자열을 가지고있는 String 인스턴스를 만들어서  변경 가능한 guess 변수에 할당하는것입니다.

 

 

표준 입력

다음으로 이 코드를 봅시다.

 

    io::stdin()
        .read_line(&mut guess)
        .expect("입력받지 못했습니다.");

 

한 줄씩 살펴보죠

 

io::stdin()

 

맨 첫 줄에 use std::io; 를 작성한게 기억나시나요? 여기서 우리는 io모듈을 불러왔습니다. io::stdin()io모듈로부터 stdin 함수를 호출한 것입니다.  만약 io모듈을 import 하지 않았다면 std::io::stdin을 호출해야됩니다.

 

stdin 함수는 std::io::Stdin의 인스턴스를 리턴합니다.

 

 

 

다음 줄을 살펴보죠

 

	.read_line(&mut guess)

 

read_line 메서드는 사용자로부터 입력을 받습니다. 인자로 &mut guess를 주었는데 &은 참조자입니다. 그리고 참조자는 기본적으로 불변이기 때문에 &guess가 아니라 &mut guess로 작성해서 변경 가능한 참조자로 바꿔서 인자로 넣어야 합니다.

 

 

 

다음 줄은 다음과 같습니다.

 

	.expect("입력받지 못했습니다.");

 

만약 입력을 받는 과정에서 에러가 발생한다면 "입력받지 못했습니다."가 출력됩니다. read_line에서는 OkErr 두 개의 반환이 나옵니다. expect는 에러가 발생했을 경우에 실행되는 메서드입니다.

 

 

변수 출력

이제 마지막줄을 봅시다.

 

println!("당신의 예측: {}", guess);

 

여기서 guess의 값이 {}위치에 들어가서 출력이 됩니다.

만약 변수 여러개를 출력하려면 {}를 변수 개수 만큼 작성하고 println!의 인자로 순서대로 작성합니다.

 

let x = 5;
let y = 10;

println!("x = {} and y = {}", x, y); // "x = 5 and y = 10"가 출력됩니다.

 

이제 지금까지 작성한 코드를 실행시켜보죠.

 

 

잘 작동합니다! 이제 다음으로 우리가 맞춰야 할 랜덤 정수를 만들어봅시다.

 

 

다음글에 이어서 진행하겠습니다.

 

2022.10.05 - [Rust] - [2 - 2] Rust 간단한 숫자 맞추기 게임

 

[2 - 2] Rust 간단한 숫자 맞추기 게임

지난글에 이어서 랜덤 정수를 만들어보겠습니다. 랜덤 정수 생성하기 Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 Rust 크레이트(Crate)를 사용하여 외부 라이브러리 가져오기 러스트

supern0va.tistory.com

 

반응형