状态功能栏-C
Status function bar - C
我有这个功能:
void choiceTwo(void){
system("clear");
printf("================ RUN ALL FUNCTION ================\n\n");
printf("\nTest case 'create/destroy'... ");
fflush(stdout);
test_create_destroy();
printf("OK\n");
printf("Test case 'add/remove edge'... ");
fflush(stdout);
test_add_remove_edge();
printf("OK\n");
printf("Test case 'print graph'... ");
fflush(stdout);
test_print_graph();
printf("OK\n");
printf("Test case 'null'... ");
fflush(stdout);
test_null();
printf("OK\n");
printf("\nPress enter to continue ");
getchar();
getchar();
main();
}
如何使用图中这样的进度条(百分比)打印此功能的状态?
Status Bar
我尝试使用 python 来做到这一点,但不知道如何完全控制功能状态
精度字段 %.precision
可让您打印特定数量的字符。星号将允许使用变量。 %.*s
将从 x
数组中打印 done
个字符,然后从 dash
数组中打印 50 - done
个字符。
使用回车 return、\r
应该在循环进行时在同一行打印循环。
#include <stdio.h>
int main()
{
int loop = 1;
int done = 0;
int end = 200000;
char dash[51] = "--------------------------------------------------";
char x[51] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
float percent = 0.0f;
while ( loop <= end) {
percent = ( (float)loop * 100) / end;
done = percent / 2.0f;
printf ( "Progress: [%.*s%.*s]%6.1f%% Complete\r", done, x, 50 - done, dash, percent);
loop++;
}
printf ( "\n");
return 0;
}
如果您的终端支持转义码,这可用于实现图像中指示的颜色。
#include <stdio.h>
int main()
{
int loop = 1;
int done = 0;
int end = 200000;
char dash[51] = "--------------------------------------------------";
char blank[51] = " ";
float percent = 0.0f;
printf ( "3[?25l");//hide cursor
printf ( "3[38;5;10m");//green text
printf ( "3[48;5;0m");//on black
while ( loop <= end) {
percent = ( (float)loop * 100) / end;
done = percent / 2.0f;
printf ( "Progress: [3[38;5;0m3[48;5;10m");//black text on green
printf ( "%.*s3[38;5;10m3[48;5;0m%.*s]%6.1f%% Complete\r"//back to green text on black
, done, blank, 50 - done, dash, percent);
loop++;
}
printf ( "3[0m");//reset color
printf ( "3[?25h");//show cursor
printf ( "\n");
return 0;
}
这将进度包装在一个函数中。使用您希望显示条形图的行(0 到 23)、到目前为止完成的项目和项目总数调用此函数。
#include <stdio.h>
void working ( int showat, int done, int total) {
char dash[51] = "--------------------------------------------------";
char blank[51] = " ";
int portion = 0;
float percent = 0.0f;
printf ( "3[?25l");//hide cursor
printf ( "3[38;5;10m");//green text
printf ( "3[48;5;0m");//on black
printf ( "3[%d;H", showat);//move curson to line showat
percent = ( (float)done * 100) / total;
portion = percent / 2.0f;
printf ( "Progress: [3[38;5;0m3[48;5;10m");//black text on green
printf ( "%.*s3[38;5;10m3[48;5;0m%.*s]%6.1f%% Complete\r"//back to green text on black
, portion, blank, 50 - portion, dash, percent);
printf ( "3[0m");//reset color
printf ( "3[?25h");//show cursor
}
int main()
{
int loop = 1;
int end = 20000;
while ( loop <= end) {
working ( 23, loop, end);
loop++;
}
printf ( "\n");
return 0;
}
试试这个代码
#include <stdio.h>
#include <unistd.h>
void working ( int showat, int done, int total) {
char dash[51] = "--------------------------------------------------";
char blank[51] = " ";
int portion = 0;
float percent = 0.0f;
printf ( "3[?25l");//hide cursor
printf ( "3[38;5;10m");//green text
printf ( "3[48;5;0m");//on black
printf ( "3[%d;H", showat);//move curson to line showat
percent = ( (float)done * 100) / total;
portion = percent / 2.0f;
printf ( "Progress: [3[38;5;0m3[48;5;10m");//black text on green
printf ( "%.*s3[38;5;10m3[48;5;0m%.*s]%6.1f%% Complete\r"//back to green text on black
, portion, blank, 50 - portion, dash, percent);
printf ( "3[0m");//reset color
printf ( "3[?25h");//show cursor
}
void test_progress ( ) {
int item = 0;
int allitems = 200;
//do things in functioin where you need to show progress
for ( item = 0; item <= allitems; item++) {
working ( 5, item, allitems);
usleep ( 50000);
}
}
void test_loop ( ) {
int item = 0;
int allitems = 500;
//do things in functioin where you need to show progress
for ( item = 0; item <= allitems; item++) {
working ( 9, item, allitems);
usleep ( 50000);
}
}
void choiceTwo(void){
printf ( "3[2J");//clear screen
printf ( "3[0;H");//move curson to line 0
printf("================ RUN PROGRESS TEST ================\n\n");
printf("\nTest progress'... ");
test_progress();
printf("\nOK\n");
printf("\nTest loop'... ");
test_loop();
printf("\nOK\n");
}
int main()
{
choiceTwo ( );
return 0;
}
我有这个功能:
void choiceTwo(void){
system("clear");
printf("================ RUN ALL FUNCTION ================\n\n");
printf("\nTest case 'create/destroy'... ");
fflush(stdout);
test_create_destroy();
printf("OK\n");
printf("Test case 'add/remove edge'... ");
fflush(stdout);
test_add_remove_edge();
printf("OK\n");
printf("Test case 'print graph'... ");
fflush(stdout);
test_print_graph();
printf("OK\n");
printf("Test case 'null'... ");
fflush(stdout);
test_null();
printf("OK\n");
printf("\nPress enter to continue ");
getchar();
getchar();
main();
}
如何使用图中这样的进度条(百分比)打印此功能的状态?
Status Bar
我尝试使用 python 来做到这一点,但不知道如何完全控制功能状态
精度字段 %.precision
可让您打印特定数量的字符。星号将允许使用变量。 %.*s
将从 x
数组中打印 done
个字符,然后从 dash
数组中打印 50 - done
个字符。
使用回车 return、\r
应该在循环进行时在同一行打印循环。
#include <stdio.h>
int main()
{
int loop = 1;
int done = 0;
int end = 200000;
char dash[51] = "--------------------------------------------------";
char x[51] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
float percent = 0.0f;
while ( loop <= end) {
percent = ( (float)loop * 100) / end;
done = percent / 2.0f;
printf ( "Progress: [%.*s%.*s]%6.1f%% Complete\r", done, x, 50 - done, dash, percent);
loop++;
}
printf ( "\n");
return 0;
}
如果您的终端支持转义码,这可用于实现图像中指示的颜色。
#include <stdio.h>
int main()
{
int loop = 1;
int done = 0;
int end = 200000;
char dash[51] = "--------------------------------------------------";
char blank[51] = " ";
float percent = 0.0f;
printf ( "3[?25l");//hide cursor
printf ( "3[38;5;10m");//green text
printf ( "3[48;5;0m");//on black
while ( loop <= end) {
percent = ( (float)loop * 100) / end;
done = percent / 2.0f;
printf ( "Progress: [3[38;5;0m3[48;5;10m");//black text on green
printf ( "%.*s3[38;5;10m3[48;5;0m%.*s]%6.1f%% Complete\r"//back to green text on black
, done, blank, 50 - done, dash, percent);
loop++;
}
printf ( "3[0m");//reset color
printf ( "3[?25h");//show cursor
printf ( "\n");
return 0;
}
这将进度包装在一个函数中。使用您希望显示条形图的行(0 到 23)、到目前为止完成的项目和项目总数调用此函数。
#include <stdio.h>
void working ( int showat, int done, int total) {
char dash[51] = "--------------------------------------------------";
char blank[51] = " ";
int portion = 0;
float percent = 0.0f;
printf ( "3[?25l");//hide cursor
printf ( "3[38;5;10m");//green text
printf ( "3[48;5;0m");//on black
printf ( "3[%d;H", showat);//move curson to line showat
percent = ( (float)done * 100) / total;
portion = percent / 2.0f;
printf ( "Progress: [3[38;5;0m3[48;5;10m");//black text on green
printf ( "%.*s3[38;5;10m3[48;5;0m%.*s]%6.1f%% Complete\r"//back to green text on black
, portion, blank, 50 - portion, dash, percent);
printf ( "3[0m");//reset color
printf ( "3[?25h");//show cursor
}
int main()
{
int loop = 1;
int end = 20000;
while ( loop <= end) {
working ( 23, loop, end);
loop++;
}
printf ( "\n");
return 0;
}
试试这个代码
#include <stdio.h>
#include <unistd.h>
void working ( int showat, int done, int total) {
char dash[51] = "--------------------------------------------------";
char blank[51] = " ";
int portion = 0;
float percent = 0.0f;
printf ( "3[?25l");//hide cursor
printf ( "3[38;5;10m");//green text
printf ( "3[48;5;0m");//on black
printf ( "3[%d;H", showat);//move curson to line showat
percent = ( (float)done * 100) / total;
portion = percent / 2.0f;
printf ( "Progress: [3[38;5;0m3[48;5;10m");//black text on green
printf ( "%.*s3[38;5;10m3[48;5;0m%.*s]%6.1f%% Complete\r"//back to green text on black
, portion, blank, 50 - portion, dash, percent);
printf ( "3[0m");//reset color
printf ( "3[?25h");//show cursor
}
void test_progress ( ) {
int item = 0;
int allitems = 200;
//do things in functioin where you need to show progress
for ( item = 0; item <= allitems; item++) {
working ( 5, item, allitems);
usleep ( 50000);
}
}
void test_loop ( ) {
int item = 0;
int allitems = 500;
//do things in functioin where you need to show progress
for ( item = 0; item <= allitems; item++) {
working ( 9, item, allitems);
usleep ( 50000);
}
}
void choiceTwo(void){
printf ( "3[2J");//clear screen
printf ( "3[0;H");//move curson to line 0
printf("================ RUN PROGRESS TEST ================\n\n");
printf("\nTest progress'... ");
test_progress();
printf("\nOK\n");
printf("\nTest loop'... ");
test_loop();
printf("\nOK\n");
}
int main()
{
choiceTwo ( );
return 0;
}