LINUX.ORG.RU

История изменений

Исправление beastie, (текущая версия) :

На pure C твой код выглядел бы примерно так:

#include <ncurses.h>
#include <stdio.h>
#include <unistd.h>

char *
progress(unsigned int percent)
{
        static char pBar[40] = {};
        char *p = pBar;
        int i;

        if (percent > 100)
                percent = 100;

        *p++ = '[';

        for (i = 0; i < percent / 5; i++)
                *p++ = '|';

        for (; i < 20; i++)
                *p++ = ' ';

        *p++ = ']';

        snprintf(p, sizeof(pBar) - (p - pBar), "%4i%%", percent);

        return pBar;
}

int
main(int argc, char **argv)
{
        char *pBar;
        int i;

        initscr();

        for (i = 0; i <= 100; i++) {
                pBar = progress(i);
                mvprintw(2, 0, "%s\n", pBar);
                refresh();
                sleep(1);
        }

        endwin();

        return 0;
}
PS: правда там ещё куча места для оптимизации. И меленький бонус: gdb работает. =)

Исходная версия beastie, :

На pure C твой код выглядел бы примерно так:

#include <ncurses.h>
#include <stdio.h>
#include <unistd.h>

char *
progress(unsigned int percent)
{
        static char pBar[40] = {};
        char *p = pBar;
        int i;

        if (percent > 100)
                percent = 100;

        *p++ = '[';

        for (i = 0; i < percent / 5; i++)
                *p++ = '|';

        for (; i < 20; i++)
                *p++ = ' ';

        *p++ = ']';
        *p++ = ' ';
        *p++ = ' ';

        snprintf(p, sizeof(pBar) - (p - pBar), "%i%%", percent);

        return pBar;
}

int
main(int argc, char **argv)
{
        char *pBar;
        int i;

        initscr();

        for (i = 0; i <= 100; i++) {
                pBar = progress(i);
                mvprintw(2, 0, "%s\n", pBar);
                refresh();
                sleep(1);
        }

        endwin();

        return 0;
}
PS: правда там ещё куча места для оптимизации. И меленький бонус: gdb работает. =)