我想更新C控制台应用中的屏幕。我想做一个控制台进度条。我怎么能够?看看这个:
正在下载...于:
| ==== | 34%
正在下载...这些必须在同一行,我必须更新该行。
| ===== | 50%
答案 0 :(得分:2)
看一下这个例子:http://www.rosshemsley.co.uk/2011/02/creating-a-progress-bar-in-c-or-any-other-console-app/
重点是:
我们必须首先编写正确的转义序列以便终端 将知道将下一个符号作为命令执行。在C这逃脱 代码是“\ 033 [”。然后我们按照我们喜欢的任何命令来执行此操作。在此 例如我们使用“\ 033 [F”上升一行后跟“\ 033 [J”到 清楚一条线。这会擦除负载条所在的线路,以及 定位光标,以便我们可以再次重写相同的行。
// Process has done i out of n rounds,
// and we want a bar of width w and resolution r.
static inline void loadBar(int x, int n, int r, int w)
{
// Only update r times.
if ( x % (n/r) != 0 ) return;
// Calculuate the ratio of complete-to-incomplete.
float ratio = x/(float)n;
int c = ratio * w;
// Show the percentage complete.
printf("%3d%% [", (int)(ratio*100) );
// Show the load bar.
for (int x=0; x<c; x++)
printf("=");
for (int x=c; x<w; x++)
printf(" ");
// ANSI Control codes to go back to the
// previous line and clear it.
printf("]\n\033[F\033[J");
}
答案 1 :(得分:0)
在许多系统上\ r \ n可以用来覆盖线路......你只需要确保以某种方式冲洗线路。
static const char equals[] = "=====....====="; // 50 toal ='s float percent; // percentage... assuming you need floating int p; // integer percentags for ( percent = 0.0; percent < 100.0; percent++ ) { p = percent + 0.5; fprintf( stdout, "\r|%.*s | %d", p/2,equals, p ); fflush(stdout); // assure line written, even without \n } p = percent + 0.5; printf( "\r|%.*s | %d\n", p/2,equals, p ); // final line with \n
现在是读者提防未编译和未经测试的代码的时候了。
答案 2 :(得分:0)
您只需使用\b
个字符清除您的行。 printf("\b\b\b\b\b\b%5d",value); fflush(stdout)
。这是一种非常简单的方法。当然,如果你需要做更复杂的事情,编辑多行,坐标管理,你应该考虑使用curses。
答案 3 :(得分:-1)
#include <stdlib.h>
#include<stdio.h>
int main(void)
{
int i = 0;
for(i = 0; i <= 100; i+= 10)
{
int j;
for(j = 0; j <= i/10; j++)
printf("=");
printf("%d\n",i);
sleep(1);
system("clear");
}
}