< 返回博客

rust版的console进度条实现

lee.sen 发表于

闲得无聊,便想用rust来写写进度条的实现,参考来网上c语言版本的实现,遂用rust也写了一个。 废话不多说, 直接上代码:


use std::thread::sleep;
use std::time::Duration;
use std::io::prelude::*;
use std::io::{self, BufWriter, Write};

fn progress1(){
    let mut _str: [char;101] = [' ';101];
    let nchar:[char;4] = ['-','\\', '|', '/',];
    let mut sw = BufWriter::new(io::stdout());
    for progress_v in 0..=100usize{
        // 注意 /r xxxx 和 xxxx /r的区别: 前者是先定位到行头再输出xxxx, 后者则是先输出xxxx,再定位到行头。
        // 前者再mac osx上能正确地看到输出,后者则一直不显示输出。
        sw.write_fmt(format_args!("\r{}",'['));
        _str[progress_v] = '#';
        for i in _str.iter(){
            sw.write_fmt(format_args!("{}", i));
        }
        sw.write_fmt(format_args!("{}", ']'));
        let _ = sw.write_fmt(format_args!("\t({:3}%)\t[{}]", progress_v, nchar[progress_v % 4]));
        sw.flush();
        sleep(Duration::from_millis(400));
    }
}

fn main() {
    progress1();
}

评论区

XG.Ley 2018-09-02T10:20:18.438892

多谢分享。

fishfish 2018-09-03T01:20:55.969888

谢谢,谢谢分享

fishfish 2018-09-03T01:22:16.288538

for progress_v in 0..=100usize

..= 这个语法是什么意思,怎么没有看到过

作者 lee.sen 2018-09-03T02:32:23.645043

0..=100表示区间:[0,100]; 0..100表示区间:[0,100)

@fishfish for progress_v in 0..=100usize ..= 这个语法是什么意思,怎么没有看到过

作者 lee.sen 2018-09-03T03:02:07.696786

0..100: 0 <= x <100; 0..=100 : 0<= x <= 100

@lee.sen 0..=100表示区间:[0,100]; 0..100表示区间:[0,100)

@fishfish for progress_v in 0..=100usize ..= 这个语法是什么意思,怎么没有看到过

fishfish 2018-09-03T04:33:47.175873

谢谢,rust 大法好

@lee.sen 0..100: 0 <= x <100; 0..=100 : 0<= x <= 100

@lee.sen 0..=100表示区间:[0,100]; 0..100表示区间:[0,100)

@fishfish for progress_v in 0..=100usize ..= 这个语法是什么意思,怎么没有看到过

1 共 6 评论, 共 1 页