Реализовать индикатор выполнения в стиле BSD на C? - PullRequest
2 голосов
/ 14 ноября 2011

Я пытаюсь сделать простой индикатор выполнения, как 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;
}

Ответы [ 2 ]

3 голосов
/ 14 ноября 2011

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

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

fflush(stdout);
2 голосов
/ 14 ноября 2011

Трудно сказать сразу, но имейте в виду, что размер массивов изменяется от 0 до size - 1. Что означает это:

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

Это ошибка с ошибкой. Это должно быть либо i > 3, либо i >= 4.

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

...