관리 메뉴

Bull

[Rust] 학생 성적 출력 만들기 #series of 3GNG 본문

Computer Language/Rust

[Rust] 학생 성적 출력 만들기 #series of 3GNG

Bull_ 2024. 5. 7. 21:56
series of 3GNG
의 보는 게 찮아서, GPT로 동적인 부하기: 어차피 강의는 머리에 잘 안 남아..

 

Code


use std::io;
use std::collections::HashMap;
use std::io::Write; // flush를 사용하기 위해 필요합니다.

fn main() {
    let mut student_grades = HashMap::new();
    let mut input = String::new();

    loop {
        println!("학생 이름을 입력하세요 (종료하려면 'done' 입력):");
        io::stdout().flush().unwrap(); // 터미널에 즉시 출력하도록 flush합니다.
        input.clear(); // 이전 입력을 클리어합니다.
        io::stdin().read_line(&mut input).expect("입력 실패");
        let name = input.trim().to_string(); // 줄바꿈을 제거하고 새로운 String으로 복사합니다.

        if name == "done" {
            break;
        }

        println!("{}의 성적을 입력하세요:", name);
        io::stdout().flush().unwrap();
        input.clear();
        io::stdin().read_line(&mut input).expect("입력 실패");

        let grade: f32 = input.trim().parse().expect("성적 파싱 실패");

        student_grades.insert(name, grade); // `name`이 이제 String이므로, 직접 사용 가능합니다.
    }

    println!("\n학생 성적 목록:");
    for (name, grade) in &student_grades {
        println!("{}: {:.2}", name, grade);
    }
}

 

| let mut

가변적으로 사용할 수 있는 변수이다. (mutable)

let x = 5;
// x = 6; // 이 코드는 컴파일 에러를 발생시킵니다. 왜냐하면 x는 불변이므로 값을 변경할 수 없습니다.
let mut y = 5;
y = 6; // 가변 변수이므로 이 코드는 정상적으로 작동합니다. y의 값을 6으로 변경할 수 있습니다.

 

| io::stdout().flush().unwrap();

입력 버퍼를 지우고 unwrap()을 통해 "패닉" 발생 시 패닉을 피한 후 종료한다.

 

 Rust에서 "패닉(panic)"은 프로그램이 복구 불가능한 상태에 빠졌을 때 발생하는 런타임 에러이다.

예외 비슷한 거라고 생각하고 우선은 가볍게 넘어가자.

 

| io::stdin().read_line(&mut input).expect("입력 실패");

입력을 받는다. expect()는 알기 쉬운 예외 발생 시에 대한 예외 처리를 진행한다. unwrap()에서 사용했던 패닉과 비슷하다.

 

| f32

f32는 float 32bit 부동 소수점을 변수에 명시해준다.

 

| let mut student_grades = HashMap::new();

HashMap은 일반적인 키, 값을 저장하는 표준 자료구조이다.