输入输入后执行print!()

时间:2019-05-27 02:52:50

标签: input printing rust

我想知道为什么 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

2 个答案:

答案 0 :(得分:0)

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

具体来说,此行:

  

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

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

答案 1 :(得分:0)

这就是我解决问题的方法(感谢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()
}