課題
練習として以下のプログラムを作った。
文字列を入力して、挨拶文を出力するだけ。
use std::io::stdin;
fn main() {
let mut name = String::new();
println!("名前を入力してください> ");
stdin().read_line(&mut name).unwrap();
// read_lineは改行コード(\r\n)を含むので.trim()してから出力。
println!("こんにちは、{}さん。", name.trim());
}
実行結果
名前を入力してください>
beginner
こんにちは、beginnerさん。
「名前を入力してください> 」と名前の入力行が分かれている。
同じ行にそのまま入力できるほうが自然なので改良したいが、println! を print! に変えるだけではうまくいかなかった。
以下のように read_line と print! の処理順が逆になってしまう。
beginner
名前を入力してください> こんにちは、beginnerさん。
解決策
flush()を使えばよい。
use std::io::stdin;
use std::io::{stdout, Write};
fn main() {
let mut name = String::new();
print!("名前を入力してください> ");
stdout().flush().unwrap();
stdin().read_line(&mut name).unwrap();
println!("こんにちは、{}さん。", name.trim());
}
実行結果
名前を入力してください> begginer
こんにちは、begginerさん。
参考
https://doc.rust-lang.org/std/io/struct.Stdin.html
https://doc.rust-lang.org/std/macro.print.html
実践Rust入門 6章