私の計算ツール(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);
}
ただし、固定幅の進行状況バーだけが印刷されます。これを変更して画面の幅を読み取り、全幅のプログレスバーを印刷できますか?
struct winsize max;
ioctl(0, TIOCGWINSZ , &max);
printf ("columns %d\n", max.ws_col); // Always 70
そしてまた、私は、依存関係を追加する必要はありません。私がこれまで試した何(のようwget
またはapt-get
プログレスバー)
UPDATE
はioctlを使用して、端末の幅を読み取ることです以下のようなncurses
...
UPDATE 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);
}
あなたは右、固定 'barWidth'がありますか?あなたはそれをどのように拡大・縮小したいのですか? –
@SouravGhoshはい固定のbarWidthがあります。固定しないようにしてください。現在の端子の幅を読み替えてください。 –
それで、あなたの試みは何ですか? –