我有以下代码,使我能够使控制台输出显示在同一行。但是,如果先前打印的值的长度大于其后的值,则会显示较长值的残余。我在Python等语言中看到过有关同一事物的其他问题,但我不确定如何在Rust中克服这个问题。
以下是一个例子:
use std::io::prelude::*;
fn main() {
let fruits = ["Blueberry", "Orange", "Cherry", "Lemon", "Apple"];
print_value(&fruits);
}
fn print_value(e: &[&str]) {
for val in e {
print!("\rStatus: {}", val);
std::io::stdout().flush().unwrap();
// pause program temporarily
std::thread::sleep(std::time::Duration::new(2, 0));
}
}
答案 0 :(得分:4)
某些终端有一个特殊的字符序列,打印时会清除当前光标位置右侧的行。
VT100兼容终端具有字符序列EL0。在Rust中,可以用"\x1B[K"
表示。
这里有一点thingy可能是一个例子。
要以更便携的方式执行此操作,请使用终端库,例如term及其delete_line方法。