【问题标题】:print!() executes after the input is entered [duplicate]print!() 在输入输入后执行[重复]
【发布时间】:2019-05-27 14:31:08
【问题描述】:

我想知道为什么这里的 print!() 宏在 read_line

之后执行
// ./src/main.rs
use std::io;

fn main() {
    print!("Input : ");
    let stdin = io::stdin();
    let mut input = String::new();
    stdin.read_line(&mut input).expect("Couldn't read_line");
}

这段代码打印出来:

   heyy
   Input : 

但我希望:

Input : heyy

【问题讨论】:

  • print 是否在 Rust 中缓冲?如果在print 语句中添加新行怎么办?

标签: input printing rust


【解决方案1】:

您可以在此处阅读 Rust 文档:https://doc.rust-lang.org/std/macro.print.html

具体来说,这一行:

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

在使用大多数语言的终端时,这很常见。 stdout 几乎在所有终端上都有缓冲。您可以在某些 AFAIK 上将其关闭,但您最好按照他们的建议调用 flush 或者我相信如果您向其写入新行,大多数终端都会刷新其输出。

【讨论】:

【解决方案2】:

这就是我解决问题的方法(感谢Vaughan Hills):

// Returns the input for a given message - msg
fn input(msg : &str) -> String {
    let mut input = String::new();
    print!("{}", msg);
    io::stdout().flush().unwrap();
    io::stdin().read_line(&mut input).unwrap();
    input.trim().to_string()
}

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多