gpt4 book ai didi

c - 控制台中的全宽进度条

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:14 24 4
gpt4 key购买 nike

我在为我的计算工具(用 c 编写)添加进度条时遇到问题。有一个简单的进度条码,我可以打印进度:

void print_progress(float progress) 
{
int barWidth = 70;
int pos = barWidth * progress;

printf("%c",'[');

for (int i = 0; i < barWidth; ++i)
{
if (i < pos) {
printf("%c",'=');
}
else if (i == pos) {
printf("%c",'>');
}
else {
printf("%c",' ');
}
}

printf("] %f%% \r",(progress * 100.0));
fflush(stdout);
}

不过,它只打印一个固定宽度的进度条。我如何更改它以读取屏幕宽度并打印全角进度条? (像 wgetapt-get 进度条)

更新

到目前为止我尝试的是使用 ioctl 读取终端宽度:

struct winsize max;
ioctl(0, TIOCGWINSZ , &max);
printf ("columns %d\n", max.ws_col); // Always 70

而且我也不想添加像ncurses这样的依赖...

更新 2

最终(不工作)版本:

void loadbar(unsigned int x, unsigned int n, unsigned int max_width) {
struct winsize ws;
ioctl(0, TIOCGWINSZ, &ws);
int barWidth = ws.ws_col;
if(barWidth > max_width) {
barWidth = max_width;
}
float ratio = x/(float)n;
int c = ratio * barWidth;
printf("%s","[");
for (x=0; x<c; x++) {
printf("%s","=");
}
printf("%s",">");
for (x=c+1; x<barWidth; x++) {
printf("%s"," ");
}
printf("] %03.2f%%\r",100.0*ratio);
fflush(stdout);
}

最佳答案

只需使用:

struct winsize w;
ioctl(0, TIOCGWINSZ, &w);

printf ("lines %d\n", w.ws_row);
printf ("columns %d\n", w.ws_col);

关于c - 控制台中的全宽进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41461448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com