【Rust】コンソールにて数値を入力し、matchを用いて結果をprintにて出力させる方法
前回ではコンソールにて文字列を入力し出力するやり方を書きました。
今回はRustプロジェクトにおいて、コンソールにて何かしら入力した数値を元に、それぞれ異なる出力結果を表示する方法を説明します。
なお例のごとく、C++と合わせていきたいと思います。
【C++での書き方】
C++では文字列も数値も、 cin を用いる事で解決出来ます。
#include <iostream> using namespace std; int main() { int answer; cout << "0 〜 9 から1つ数値を選んで入力して下さい:\n"; cin >> answer; switch (answer) { case 1: cout << "ゲーム01を開始します。" << endl; break; case 2: cout << "ゲーム02を開始します。" << endl; break; case 3: cout << "ゲーム03を開始します。" << endl; break; default: cout << "終了します。" << endl; break; } return 0; }
フィルターを掛けてないので数字以外の文字も受け付けてしまいますが、ご了承下さい。出力結果は下記となります。
0 〜 9 から1つ数値を選んで入力して下さい:
1
ゲーム01を開始します。
1 〜 3 以外の数字や文字列では下記結果になります。
0 〜 9 から1つ数値を選んで入力して下さい:
7
終了します。
【Rustでの書き方】
ではRustで同じ処理を行なえる様に書いてみます。
use std::io; fn main() { println!("0 〜 9 から1つ数値を選んで入力して下さい:"); let mut number = String::new(); io::stdin().read_line(&mut number).ok(); let answer = number.trim().parse().ok().unwrap(); match answer { 1 => println!("ゲーム01を開始します。"), 2 => println!("ゲーム02を開始します。"), 3 => println!("ゲーム03を開始します。"), _ => println!("終了します。"), } }
match を使用しました。ポイントとなる部分を説明していきます。
let mut number = String::new();
コンソールからの入力はあくまで文字なので、いずれ数値に置き換えるとしても、まずはString型でミュータブル変数を作成する必要があります。
let answer = number.trim().parse().ok().unwrap();
今回は文字列ではなく数値に変換してanswer変数に格納したいので、parse() 関数を用います。よって、もし数値以外の文字等を入力した場合はエラーとなり、処理が終了します。例外処理をシステム側で行なってくれる訳ですね。
出力結果はC++の時と同じになると思います。
【入力処理の関数化】
この処理も関数化して使いやすくしてみましょう。
use std::io; fn main() { println!("0 〜 9 から1つ数値を選んで入力して下さい:"); let answer01 = get_input(); println!("再度、数値を入力して下さい:"); let answer02 = get_input(); match answer01 { 1 => println!("ゲーム01を選択。プレイ時間は{}分です。", answer02), 2 => { let num01 = 4; println!("ゲーム02を選択。 {} + {} = {}", num01 , answer02 , num01 + answer02); }, 3 => { print!("ゲーム03を選択。 "); println!("answer02 = {} です。", answer02); }, _ => println!("終了します。"), } } fn get_input() -> i32 { let mut number = String::new(); io::stdin().read_line(&mut number).ok(); return number.trim().parse().ok().unwrap(); }
get_input() 関数にて、戻り値の型を i32 や usize 等にします。
3 => { print!("ゲーム03を選択。 "); println!("answer02 = {} です。", answer02); },
また、match の各パターン内において複数の処理を行ないたい場合は、『 { } 』で全体を括る事で解決出来ます。
出力結果の一例は下記となります。
0 〜 9 から1つ数値を選んで入力して下さい:
2
再度、数値を入力して下さい:
36
ゲーム02を選択。 4 + 36 = 40
同じく、プログラミングのスキルチェック等での課題でお役に立てればと。
以上です。