printはflushする必要がある。
成果物
問題
以下のように1行で標準出力+標準入力したい。
値を入力してください: <stdin待ち>
解決
use std::io; use std::io::Write; fn main() { print!("任意の値を入力してください: "); io::stdout().flush().unwrap(); let mut guess = String::new(); io::stdin().read_line(&mut guess) .expect("入力エラー。read_line()で失敗しました。"); }
ポイント
println!
でなくprint!
を使って末尾から改行を省くflush()
を使ってprint!
を即時出力する
NG集
println!
2行になってしまう。
use std::io; fn main() { println!("値を入力してください: ") let mut value = String::new(); io::stdin().read_line(&mut value) .expect("入力エラー。read_line()で失敗しました。"); }
値を入力してください: <stdin待ち>
print!
入力が確定されるまで標準出力されない。
use std::io; fn main() { print!("値を入力してください: ") let mut value = String::new(); io::stdin().read_line(&mut value) .expect("入力エラー。read_line()で失敗しました。"); }
<stdin待ち>
何かを入力すると以下のように表示される。
値を入力してください: <stdin入力値>
いやいや、「値を入力してください」は入力確定する前に表示してくれよ……。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- rustc 1.34.2 (6c2484dc3 2019-05-13)
- cargo 1.34.0 (6789d8a0a 2019-04-01)
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux