2022. 12. 29. 16:30ㆍ프로그래밍/Rust
백준 문제를 풀려다 보니 초반부터 문자열 입력을 받는 문제들이 있더라고요.
이번 예제에서는 문자열을 입력받아서 출력해 보겠습니다.
새로운 프로젝트를 생성합니다.
main.rs 파일을 아래와 같이 수정합니다.
use std::io;
fn main()
{
let mut user_input = String::new();
let stdin = io::stdin();
println!("What is your name?");
let _result = stdin.read_line(&mut user_input);
let input = user_input.replace("\r", "").replace("\n", "");
println!("Hello {}!!", input);
}
이렇게 코드를 넣고 보니 "Hello, world!" 에서 너무 많이 와버린 것 같습니다.
아무런 준비 없이 여기로 왔다면 바로 창을 닫거나 뒤로 가기를 선택하시는 분도 있을 것 같다는 생각이 드네요.
일단 아무런 사전 준비 없이 "Hello, world!"에서 바로 넘어오신 분들을 위해 한 줄 한 줄 설명드립니다.
각 라인별 코드를 설명하자면
1: 1번째 줄의 use 는 이름을 단축해서 사용할 수 있도록 도와줍니다. 6번째 줄에서 io::stdin() 을 보실 수 있는데 만약 1번째 줄의 코드가 없었다면 std::io::stdin()으로 사용해야 합니다. 만약 반복해서 여러 번 쓰인다면 번거로운 일이 되겠지요. 1번째 줄의 코드를 use std::io::stdin; 으로 변경하고, 6번째 줄의 코드를 let stdin = stdin();으로 변경해서 사용하는 것도 가능합니다.
5: 러스트는 변수를 선언할 때 let를 사용합니다. 그런데 let만 사용한다면 변수의 값을 바꿀 수 없습니다. 변수가 선언된 이후에 값을 변경할 예정이라면 mut를 붙여주어야 합니다. mut는 mutable의 줄임말입니다.
6: io::stdin()은 표준 입력에 대한 새 핸들을 반환합니다.
- https://doc.rust-lang.org/std/io/fn.stdin.html
8: println!은 문자열을 한 줄 단위로 출력하는 매크로입니다.
10: stdin.read_line(&mut user_input) 은 표준 입출력 장치로부터 줄 바꿈이 일어날 때까지의 입력을 읽어서 user_input 변수에 저장합니다. read_line 함수는 읽은 결과를 반환합니다. 여기에서는 그 결과를 _result 변수에 저장합니다. 정상적으로 읽었다면 읽은 데이터의 길이 값을 반환하고, 읽는 과정에서 문제가 생겼을 경우 Error를 반환합니다. 만약에 읽은 결과를 표시하려면 _result 변수를 match를 통해 처리할 수 있습니다. match와 관련된 예제는 다른 예제에서 보시게 될 겁니다. 러스트에서는 사용하지 않는 변수 이름 앞에 '_'를 붙이는 것으로 사용하지 않는 변수임을 명시할 수 있습니다. 붙이지 않으면 컴파일러가 경고를 출력합니다. 계속해서 컴파일러에게 혼나다 보면 알아서 고쳐서 쓰게 됩니다.
12: 10번째 라인의 read_line() 함수로 입력 받은 경우에 문자열의 끝에 줄 넘김 문자까지 저장됩니다. 여기에서 줄 넘김 문자를 제거하기 위해 replace() 함수를 사용하였습니다. 윈도우에서는 줄 단위로 문자열을 읽었을 때 문자열의 끝에 CR(Carriage return, '\r'), LF(Line Feed, '\n')를 사용하고, 리눅스에서는 LF(Line Feed, '\n')를 사용합니다.
13: println!() 함수에서는 문자열 중간에 변수 값을 넣기 위해 "{}"를 사용합니다. 이것의 여러가지 사용 방법은 다른 예제에서 알아볼 예정입니다.
프로그램의 실행 결과는 다음과 같습니다.
결과만 놓고 보면 별거 없네요.
![](https://t1.daumcdn.net/keditor/emoticon/face/large/014.png)
아래의 사이트를 방문하여 전체 코드를 받으실 수 있습니다.
https://gitlab.com/cellaxon/examples/rust/key_input
'프로그래밍 > Rust' 카테고리의 다른 글
opencv 비디오 파일의 영상 표시(rust/macos) (0) | 2024.08.28 |
---|---|
opencv with rust in windows (0) | 2024.08.27 |
Rust / "Hello World" (0) | 2022.12.29 |
Rust / 러스트 설치하기 (0) | 2022.12.29 |