wayne 发表于 2011-2-12 19:05:42

字符终端里如何实现 数字的动态更新

刚才在线安装minGW,发现字符终端里的下载进度 的那些数据是动态的更新着的。

不知道在windows的cmd 里怎么实现,有人知道吗

wayne 发表于 2011-2-12 19:11:34

应该是行缓存的,不知具体是啥工具

wayne 发表于 2011-2-12 19:14:38

该不会是退格字符吧,:L

qianyb 发表于 2011-2-14 08:50:23

应该是重新刷新行的,跟控制台程序的原理是一样的吧

wayne 发表于 2011-2-14 08:53:09

4# qianyb
我也感觉应该是行刷新

风云剑 发表于 2011-2-14 14:23:13

"\r"就可以了。

wayne 发表于 2011-2-14 18:20:59

6# 风云剑
写了一个小程序,找不到合适的调用函数,下面的代码勉强通过,
风云剑兄可否帮我改进一下#include<stdio.h>
#include<stdlib.h>
int main(){
int ii=0;
printf("http://bbs.emath.ac.cn\nhello,shis is asfkdlg\n");
for(ii=0;ii<10;ii++)
_sleep(1000),printf("\rhello,world,time elapsed:\t%d",ii*1000+ii);
}
gcc编译,有warning:

wayne.c: In function 'main':
wayne.c:7:1: warning: '_sleep' is deprecated (declared at d:\mingw452\bin\../lib/gcc/mingw32/4.5.2/../../../../include/stdlib.h:408)

wayne 发表于 2011-2-14 18:33:05

找到了一个方法,gcc没有warning:#include<stdio.h>
#include<windows.h>
int main(){
int ii=0;
printf("http://bbs.emath.ac.cn\n");
for(ii=0;ii<10;ii++)
printf("\rhello,world,time elapsed:\t%d",ii*1000+ii),Sleep(1000);
return 0;
}

wayne 发表于 2011-4-11 08:15:01

本帖最后由 wayne 于 2011-4-11 08:37 编辑

花了一个多小时,修修改改 实现了linux 命令行下 倒计时 时钟更新:
还加进去了signal.h ,不知能否基于这个实现一个响应鼠标或者键盘输入的功能来....#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#define N 10
void   sig_int(int sig)
{ printf("\tOh,man!\033[0m\n");
exit(0);
}

int main()
{        int h=1,m=1,s=N-2;
        signal(SIGINT,&sig_int);   
        printf("Don't bother me,I am counting down.\n"
                "I only recongnize: ctrl+c\n");
        while(1)        {
                printf("\r\033[1;31m%02d:%02d:%02d",h,m,s);
                fflush(stdout);
                if(h+m+s<=0) break; //死循环退出点
                               
                usleep(100000);        //0.1秒一次数据更新       
                if(s==0){ s=N;
                if (m>0) m--;
                else h--,m=N-1;       
                }
                s--;
        }
        printf("\nhmm,Good patience!\033[0m\n");
}
页: [1]
查看完整版本: 字符终端里如何实现 数字的动态更新