web-dev-qa-db-ja.com

Rustで末尾の改行なしで出力を印刷するにはどうすればよいですか?

マクロprintln! in Rustは、各出力の最後に常に改行文字を残します。たとえば、

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

出力を与える

Enter the number : 
56

ユーザーの入力が必要ない56を改行します。どうすればよいですか?

26
7_R3X

代わりに _print!_マクロ を使用できます。

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

注意してください:

Stdoutはデフォルトで行バッファリングされることが多いため、出力がすぐに出力されるように io::stdout().flush() を使用する必要がある場合があることに注意してください。

28
sjagr

一見したところよりもトリッキーです。他の回答では_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);
}
_
38
user1411616