概要
Rustでキーボードから情報を入力させるには、標準ライブラリの std::io モジュールを使用する。
std::io::stdin を使用して標準入力から読み取り、read_line メソッドで文字列を取得する。
基本的な入力
標準入力から値を読み取るには、まずstd::ioをインポートし、可変の文字列バッファを用意する必要がある。
read_lineメソッドは、入力された文字列を指定したバッファに追加する。
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("読み込みに失敗しました");
println!("{}", input);
}
また、入力を促すメッセージを表示するには、println! マクロ や print! マクロを使用する。
print! マクロは改行しないため、入力プロンプトに適している。
use std::io::{self, Write};
fn main() {
print!("何か入力してください。: ");
io::stdout().flush().unwrap();
let mut input = String::new();
io::stdin().read_line(&mut input).expect("読み込みに失敗しました");
}
入力と条件分岐
以下の例では、標準入力と条件分岐を組み合わせている。
入力した値は文字列型になるので、trim メソッドで改行を除去して、parse メソッドで整数に変換して、その値を2019と比較している。
use std::io;
fn main() {
println!("令和元年は西暦何年?:");
let mut year = String::new();
io::stdin().read_line(&mut year).expect("読み込みに失敗しました");
let int_year: i32 = year.trim().parse().expect("数値を入力してください");
if int_year == 2019 {
println!("正解");
}
else {
println!("間違い");
}
}
入力と反復処理
以下の例では、loop文で無限ループさせることで質問を繰り返して、正解した時にbreak文で反復処理を抜ける。
use std::io;
fn main() {
loop {
println!("令和元年は西暦何年?:");
let mut year = String::new();
io::stdin().read_line(&mut year).expect("読み込みに失敗しました");
let int_year: i32 = match year.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("数値を入力してください");
continue;
}
};
if int_year == 2019 {
println!("正解");
break;
}
println!("間違い");
}
}