我想知道为什么 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
答案 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()
}