Rust打印后从控制台读取输入

3

我正在编写一个小程序,尝试通过控制台从用户获取输入,这是我所拥有的代码:

print!("Enter values seperated by spaces: ");
let mut input = String::new();
match io::stdin().read_line(&mut input) {
    Ok(_n) => println!("{}", input),
    Err(e) => println!("error: {}", e),
}

与其先打印输入由空格分隔的值: ,然后读取输入并打印输入,它会先读取输入,然后打印输入由空格分隔的值:,最后再打印输入。如何让它先打印输入由空格分隔的值:

1个回答

3

你需要刷新你的输出流

use std::io::{Write, stdout}

...

print!("Enter values separated by spaces: ");
stdout().flush();

默认情况下,大多数现代终端为了效率而采用行缓冲。如果您想覆盖这种行为,您需要自己刷新流。


1
默认情况下,大多数现代终端为了提高效率都是行缓冲的。顺便说一下,这是语言/ libc 属性而不是终端属性,缓冲发生在应用程序内部,并调节 write 系统调用实际被调用的频率。Rust 的标准输出的行缓冲发生在标准库中(而标准错误通常是无缓冲的,这就是为什么如果不小心混合使用标准错误和标准输出输出可能会得到奇怪的结果)。 - Masklinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接