宏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");
}
Run Code Online (Sandbox Code Playgroud)
所需的输出将是(STDIN表示用户被要求输入的点,它实际上没有打印):
Enter a string >> STDIN
Run Code Online (Sandbox Code Playgroud)
实际输出是:
STDIN
Enter a string >>
Run Code Online (Sandbox Code Playgroud)
另一方面,println宏不会颠倒顺序,尽管仍然存在尾随换行的问题:
Enter a string >>
STDIN
Run Code Online (Sandbox Code Playgroud)
在Python(3.x的),这可以用一个单一的线来实现,这是因为input功能允许先于STDIN提示字符串参数:variable = input("Output string")
我在Rust文档中找不到类似于Python示例的解决方案后,将任务分离到print宏和read_line函数中.
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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |