< 返回我的博客

lee.sen 发表于 2018-09-02 15:33

Tags:console,进度条

闲得无聊,便想用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();
}

评论区

写评论
fishfish 2018-09-03 12:33

谢谢,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 ..= 这个语法是什么意思,怎么没有看到过

作者 lee.sen 2018-09-03 11:02

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 ..= 这个语法是什么意思,怎么没有看到过

作者 lee.sen 2018-09-03 10:32

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

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

fishfish 2018-09-03 09:22

for progress_v in 0..=100usize

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

fishfish 2018-09-03 09:20

谢谢,谢谢分享

XG.Ley 2018-09-02 18:20

多谢分享。

1 共 6 条评论, 1 页