宏println!()
和print!()
允许您分别打印带尾换行符和不带尾换行符的字符串和变量。此外,stdin()
函数提供了从STDIN (stdin().read_line(&mut string)
)读取一行用户输入的函数。
应该可以安全地假设,如果连续使用print
宏和read_line
函数,则应该能够在同一行上写入输出并获取输入。然而,当这种情况发生时,段将以相反的顺序执行(先读取STDIN,然后打印语句)。
下面是我正在努力完成的一个例子:
use std::io;
fn main() {
let mut input = String::new();
print!("Enter a string >> ");
io::stdin().read_line(&mut input).expect("Error reading from STDIN");
}
所需的输出将是(STDIN
表示用户被要求输入的点,但实际上没有打印):
Enter a string >> STDIN
实际产出如下:
STDIN
Enter a string >>
另一方面,println
宏不会逆转顺序,尽管仍然存在尾随换行符的问题:
Enter a string >>
STDIN
在Python (3.x)中,这可以用一行来实现,因为input
函数允许在STDIN提示符之前有一个字符串参数:variable = input("Output string")
在没有在Rust文档中找到一个允许类似于Python示例的解决方案后,我将任务分成了print
宏和read_line
函数。
发布于 2019-01-18 16:32:53
stdout
在新的线路上脸红了。由于您的print!
语句既不包含也不以换行符结尾,所以它不会被刷新。您需要使用std::io::stdout().flush()
手动执行此操作。
例如
use std::io::{self, Write};
fn main() {
let mut input = String::new();
print!("Enter a string >> ");
let _ = io::stdout().flush();
io::stdin().read_line(&mut input).expect("Error reading from STDIN");
}
发布于 2019-01-18 20:45:02
您应该能够编写输出并获得同一行的输入。
在stdin
和stdout
中没有“同一行”的概念。有不同的流,如果您想要执行终端操作,您应该使用一些处理终端的东西,比如控制台。
在Python (3.x)中,这可以用一行来实现,因为输入函数允许在STDIN提示符之前有一个字符串参数:
variable = input("Output string")
好吧,给你:
use dialoguer::Input;
let name = Input::new().with_prompt("Your name").interact()?;
println!("Name: {}", name);
https://stackoverflow.com/questions/54262976
复制相似问题