[Rust] 여러개의 숫자 입력 받기

Created:

Updated:

rust에서 숫자를 입력 받는 동작 하는 몇가지 방법 정리

여러개의 숫자 입력 받아 vec로 저장 하는 방법

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use std::io;

fn main() {
    println!("input five numbers :");
    let input_val: Vec<i32> = get_numbers(5);
    println!("input values are {:?}", input_val);
}

fn get_numbers<T: std::str::FromStr>(count: usize) -> Vec<T> {
    let mut input_val: Vec<T> = Vec::with_capacity(count);

    'loop1: loop {
        let mut input = String::new();
        match io::stdin().read_line(&mut input) {
            Ok(_n) => (),
            _ => {
                println!("Error");
                continue;
            }
        }
        let mut iter = input.trim().split_whitespace();
        loop {
            let input = iter.next();
            if input != None {
                match input.unwrap().trim().parse::<T>() {
                    Ok(n) => {
                        input_val.push(n);
                        if input_val.len() >= count {
                            break 'loop1;
                        };
                    },
                    _ => {
                        println!("Error");
                        continue;
                    }
                }
            }
            else {
                break;
            }
        }
    }
    input_val
}

결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cargo run
input five numbers :
4
3 2 4
3
input values are [4, 3, 2, 4, 3]

$ cargo run
input five numbers :
5
4
3
2
1
input values are [5, 4, 3, 2, 1]


5개의 숫자 한 줄로 입력 받아 vec로 저장 하는 방법

코드

아래 코드에서 unwrap()은 잘못된 숫자가 입력되었을 경우 panic이 발생되므로 유의해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use std::io;

fn main() {
    println!("input five numbers in one line :");

    let mut input_val: Vec<i32>;

    loop {
        let mut input = String::new();
        match io::stdin().read_line(&mut input) {
            Ok(_n) => (),
            _ => {
                println!("Error");
                continue;
            }
        }

        input_val = input.trim()
            .split_whitespace()
            .map(|x| x.parse::<i32>().unwrap())
            .collect::<Vec<_>>();

        if input_val.len() >= 5 {
            input_val.truncate(5);
            break;
        }
    }

    println!("input values are {:?}", input_val);
}

결과

1
2
3
4
5
6
7
8
9
$ cargo run
input five numbers in one line :
7 6 5 4 3
input values are [7, 6, 5, 4, 3]

$ cargo run
input five numbers in one line :
1 2 3 4 5
input values are [1, 2, 3, 4, 5]

Tags:

Categories:

Updated:

Leave a comment