2016-05-30 36 views

答えて

11

代わりにprint! macroを使用できます。

print!("Enter the number : "); 
io::stdin().read_line(&mut num); 

注意:出力が直ちに放出される保証するためにio::stdout().flush()を使用する必要があるかもしれないので、標準出力が頻繁にデフォルトでラインバッファリングされていることを

注意。

+11

"* stdoutは頻繁にデフォルトで行バッファリングされるので、出力がすぐに出力されるようにするには' io :: stdout().flush() 'を使う必要があるかもしれません*" - https: //doc.rust-lang.org/std/macro.print.html – ArtemGr

+0

@ArtemGr:C++(とCI think)では、 'stdin'から読み込もうとすると' stdout'バッファが直ちにフラッシュされます。私はRustと同じ動作を期待していましたが(誤っているかもしれません)、 'print! 'ページに表示されている例は' stdin'から読み込まれていないので、この点では決定的ではありません...もっと情報がありますか? @MatthieuM。 –

+0

私は夜間にWindowsとLinuxでRustと簡単なテストを行いました。**答えのコードには**標準出力がありません。 "数字を入力してください:"は**プログラムが終了した後に**印刷され、 'read_line'が起こる前ではありません。 – ArtemGr

5

一見したように思えるよりもやっかいです。他の答えはprint!マクロについて言及していますが、それほど単純ではありません。 stdoutは、すぐに画面に書き込まれない可能性があるため、フラッシュする必要があります。 flush()は、std::io::Writeの一部である特性であり、そのためには動作範囲が必要です(これは初期の間違いです)。

use std::io; 
use std::io::Write; // <--- bring flush() into scope 


fn main() { 
    println!("I'm picking a number between 1 and 100..."); 

    print!("Enter a number: "); 
    io::stdout().flush().unwrap(); 
    let mut val = String::new(); 

    io::stdin().read_line(&mut val) 
     .expect("Error getting guess"); 

    println!("You entered {}", val); 
} 
関連する問題