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

7_R*_*R3X 19 newline println rust

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

println!("Enter the number : ");
io::stdin().read_line(&mut num);
Run Code Online (Sandbox Code Playgroud)

给出输出

Enter the number : 
56
Run Code Online (Sandbox Code Playgroud)

我不希望用户的输入56在新行上.我该怎么做呢?

小智 29

这比乍看之下看起来更棘手.其他答案提到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);
}
Run Code Online (Sandbox Code Playgroud)

  • 由于这是一个常见的“早期错误”,因此值得指出的是,在flush()之后添加unwrap()是为了隐式处理flush中的任何错误。IE 也可以这样做: `io::stdout().flush().expect("flush failed.");` (3认同)
  • 这是正确的答案!非常感谢你的帮助! (2认同)

sja*_*agr 23

您可以改用print!.

print!("Enter the number : ");
io::stdin().read_line(&mut num);
Run Code Online (Sandbox Code Playgroud)

谨防:

请注意,默认情况下stdout经常是行缓冲的,因此可能需要使用它io::stdout().flush()来确保立即发出输出.

  • "*请注意,默认情况下stdout经常是行缓冲的,所以可能需要使用`io :: stdout().flush()`来确保输出立即发出.*" - https://doc.rust- lang.org/std/macro.print!.html (15认同)