如何在 Rust 中打印没有尾随换行符的输出?

How do I print output without a trailing newline in Rust?

Rust 中的宏 println! 总是在每个输出的末尾留下一个换行符。例如

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

给出输出

Enter the number : 
56

我不希望用户的输入 56 换行。我该怎么做?

您可以改用 print! macro

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

注意:

Note that stdout is frequently line-buffered by default so it may be necessary to use io::stdout().flush() to ensure the output is emitted immediately.

这比乍一看要复杂。其他答案提到了 print! 宏,但并不是那么简单。您可能需要刷新标准输出,因为它可能不会立即写入屏幕。 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);
}