如何在Rust中打印输出而不使用尾随换行符?

ggazkfy8  于 2023-02-23  发布在  其他
关注(0)|答案(3)|浏览(212)

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

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

给出输出

Enter the number : 
56

我不希望用户的输入56出现在新的一行中,我该怎么做?

but5z9lq

but5z9lq1#

这比乍看上去要复杂得多。其他答案提到了print!宏,但它并不那么简单。你可能需要刷新stdout,因为它可能不会立即写到屏幕上。flush()std::io::Write的一个trait方法,所以它需要在作用域中才能工作(这是一个很容易犯的早期错误)。

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);
}
x0fgdtte

x0fgdtte2#

您可以改用print! macro

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

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

w7t8yxp5

w7t8yxp53#

不要使用print/ln!-宏。使用write/ln!-宏。
它更冗长,但是print/ln!在命令行应用程序中使用有问题,它们的输出可能会管道化重定向到其他应用程序,这是Unix环境的特点。
总是使用相同的(仅一次请求和“缓冲”)标准输出设备,但系统的标准输出设备因管道/重定向而改变。因此,对于每个输出到标准输出,您必须请求当前的标准输出设备(std::io::stdout())。这可以通过write/ln!-宏来完成。
所以说print/ln!坏了,多年来一直有一个公开的问题。

相关问题