在Rust中覆盖时,如何防止上一行中的字符出现?

时间:2016-06-02 15:57:22

标签: printing rust stdout

我有以下代码,使我能够使控制台输出显示在同一行。但是,如果先前打印的值的长度大于其后的值,则会显示较长值的残余。我在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));
    }
}

1 个答案:

答案 0 :(得分:4)

某些终端有一个特殊的字符序列,打印时会清除当前光标位置右侧的行。

VT100兼容终端具有字符序列EL0。在Rust中,可以用"\x1B[K"表示。

这里有一点thingy可能是一个例子。

要以更便携的方式执行此操作,请使用终端库,例如term及其delete_line方法。