String 如何从键盘上读取与输出在同一行上的字符串?

String 如何从键盘上读取与输出在同一行上的字符串?,string,io,rust,String,Io,Rust,我在读这样的字符串: print!("Input string: "); let string: String = String::new(); std::io::stdin().read_line(&mut string); 当我启动程序时,我看到: (write a string here) Input string: 但我需要: Input string: (write a string here) 如何实现这一点?添加对标准输出()的调用。flush()在调用读取行之前

我在读这样的字符串:

print!("Input string: "); 

let string: String = String::new();
std::io::stdin().read_line(&mut string);
当我启动程序时,我看到:

(write a string here)
Input string:
但我需要:

Input string: (write a string here)
如何实现这一点?

添加对
标准输出()的调用。flush()
在调用
读取行之前强制输出缓冲区:

fn main() {
   print!("Input string: "); 
   std::io::stdout().flush();
   let mut string: String = String::new();
   std::io::stdin().read_line(&mut string);
}

公认的答案是正确的:您需要在
读取行之前调用
stdout().flush()
。但是,该代码不会在Rust 1.6.0上编译。以下更改将使其编译。它们还显示了如何使用生成的字符串:

use std::io::prelude::*;
use std::io;

fn main() {
    print!("Input string: ");
    io::stdout().flush().ok().expect("Could not flush stdout");
    let mut string: String = String::new();
    let _ = std::io::stdin().read_line(&mut string);
    println!("{}", string.trim());
}