我想更新我的 C 控制台应用程序中的屏幕。我想做一个控制台进度条。我怎样才能?看这个:
正在下载...至:
|==== | 34%
正在下载...这些必须在同一行,我必须更新该行。
|===== | 50%
看看这个例子: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");
}
您可以简单地使用\b
字符来清除您的行。printf("\b\b\b\b\b\b%5d",value); fflush(stdout)
. 这是一种非常简单的方法。当然,如果你需要做更复杂的事情,编辑多行,坐标管理,你应该考虑使用curses。
在许多系统上 \r 可用于覆盖该行..您只需要确保以某种方式刷新该行。
静态 const char 等于 [] = "=====....====="; // 总共 50 个 ='s 浮动百分比;// 百分比...假设你需要浮动 诠释 p; // 整数百分比 对于(百分比 = 0.0;百分比 < 100.0;百分比++) { p = 百分比 + 0.5; fprintf(stdout, "\r|%.*s | %d", p/2,equals, p); fflush(标准输出);// 确保行写入,即使没有 \n } p = 百分比 + 0.5; printf("\r|%.*s | %d\n", p/2,equals, p); // 最后一行带有 \n
现在是读者提防未编译和未测试代码的时候了。
#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");
}
}