Внедрить индикатор выполнения в стиле BSD в C?

Я пытаюсь сделать простой индикатор выполнения, как это делает FreeBSD на экране загрузки, отображая /, | , \ , - рекурсивно , но теперь вообще выводится следующий код

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

int main ( int argc , char **argv )
{
    char arrows[4] = { '/' , '|' , '\\' , '-' };
    int i = 0;

    while (1)
    {
        printf ( "%c" , arrows[i] );

        if ( i > 3 ) 
            i = 0;
        else
            i ++;

        sleep (1);
        printf ( "\b" );
    }

    return 0;
}

person daisy    schedule 14.11.2011    source источник
comment
@DarkDust, решил мою проблему!   -  person daisy    schedule 14.11.2011


Ответы (2)


Вы не сбрасываете вывод, поэтому он будет только буферизоваться и не сбрасываться на терминал, пока буфер не заполнится.

Добавьте следующую строку после первого printf:

fflush(stdout);
person Some programmer dude    schedule 14.11.2011

Сразу сложно сказать, но имейте в виду, что массивы имеют размер от 0 до size - 1. Что означает это:

if ( i > 4 ) 
    i = 0;
else
    i ++;

Является ошибкой по отдельности. Это должно быть либо i > 3, либо i >= 4.

Что касается вашей реальной проблемы, это, вероятно, потому, что поток не сбрасывается.

person Etienne de Martel    schedule 14.11.2011