在 Rust 中覆盖时,如何防止上一行中的字符出现?
How do I prevent characters from the previous line from appearing when overwriting it in Rust?
我有以下代码可以让控制台输出出现在同一行。但是,如果先前打印的值的长度大于其后的值,则会显示较长值的剩余部分。我在 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));
}
}
一些终端有一个特殊的字符序列,打印时会清除当前光标位置右侧的行。
VT100 兼容终端有一个字符序列 EL0。在 Rust 中可以用 "\x1B[K"
.
表示
这里有一个 thingy 可以证明一个例子。
要以更便携的方式做到这一点,您可以使用终端库,例如 term and it's delete_line 方法。
我有以下代码可以让控制台输出出现在同一行。但是,如果先前打印的值的长度大于其后的值,则会显示较长值的剩余部分。我在 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));
}
}
一些终端有一个特殊的字符序列,打印时会清除当前光标位置右侧的行。
VT100 兼容终端有一个字符序列 EL0。在 Rust 中可以用 "\x1B[K"
.
这里有一个 thingy 可以证明一个例子。
要以更便携的方式做到这一点,您可以使用终端库,例如 term and it's delete_line 方法。