在C中实现BSD样式进度条?

时间:2011-11-14 14:57:48

标签: c printf sleep backspace

我正在尝试像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 个答案:

答案 0 :(得分:3)

你没有刷新输出,所以它只会被缓冲而不会刷新到终端,直到缓冲区已满。

在第一个printf之后添加以下行:

fflush(stdout);

答案 1 :(得分:2)

很难立即告知,但请记住,大小的数组从0size - 1。这意味着:

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

是一个错误的错误。它应该是i > 3i >= 4

至于你的实际问题,可能是因为没有刷新流。