一段简单程序为什么在linux终端与win控制台下运行效果不同?(望高手指点)

来源:互联网 发布:linux删除用户附加组 编辑:程序博客网 时间:2024/05/19 14:17

    一段简单程序为什么在linux终端与win控制台下运行效果不同,是程序问题还是兼容性问题,希望有谁能指点一下:

    程序是这样的(怎么加为高亮?):

#include <stdio.h>
int ProgressBar(int p, char *barname);
int main(int argc, char *argv[])
{
    long int i=0;
    for (i=0; i<=180000000; i++)  //模拟进度条增长
    {
        if(i!=0 && 180000000/i<=100 && 180000000%i==0)  /* 只在进度条长度101-180000000/i为1到100时,刷新进度条*/
        {   /*这个进度条就是显示‘进度条长度’个'|'字符,这个for循环应该使进度条不断增长直到结束*/
            ProgressBar(101-180000000/i, "Progress Bar");      /* ProgressBar第一个参数是0到100之间 ,表示进度条的长度*/           
        }

    }
    
    return 0;
}

int ProgressBar(int p, char *barname)
{
    if(p>100)
    {
        return 0;
    }    
    
    int i=1, pbc;
    char pro[50+1];
    pbc = p/2;          //length of progress bar
    if(pbc==0)
    {
        putchar(10);
        printf("/r%s      %d%c", barname, p, 37);
    }
    else
    {
        pro[0]='|';
        while(i<pbc)
        {
            pro[i]='|';
            i++;
        }
        pro[i]=0;               
        printf("/r%s   %s   %d%c", barname, pro, p, 37);
    } 
}
    win控制台效果:(vc6下编译)

    如同预期的效果进度条不断增长直到100%

 

 

 

   linux终端显示是:(gcc编译连接,直接执行pbar)

       实际效果是根本没有个增长的过程,而是光标闪烁一段时间后(程序在运行)直接显示如下(100%)

 

 

    将这段稍作修改 原本要整除180000000%i==0,才刷新 Progress Bar(在同一行刷新Bar是用回车符'/r’),改为180000000%i<50

这样一个范围内刷新,这样 linux终端显示效果会好些,而且这个值越大,效果越好(指的是增长的效果是连续的);

 

    for (i=0; i<=180000000; i++)  //模拟进度条增长
    {
        if(i!=0 && 180000000/i<=100 && 180000000%i<50)  // 只在进度条长度101-180000000/i为1到100时,刷新进度条
        {    //这个进度条就是显示‘进度条长度’个'|'字符,这个for循环应该使进度条不断增长直到结束
            ProgressBar(101-180000000/i, "Progress Bar");      //  ProgressBar第一个参数是0到100之间 ,表示进度条的长度           
        }

    }

 

    太大也会出现异样,比如改为180000000%i<500, 不过这个效果倒是和win控制台一样

 

 

   请问下各位,这个问题出在哪里了?

 

   补充:

  linux终端执行以下代码:

  ProgressBar(10, "test");
  for (i=0; i<=80000000; i++);
  ProgressBar(30, "test");
  for (i=0; i<=80000000; i++);
  ProgressBar(80, "test");
  for (i=0; i<=80000000; i++); 
  ProgressBar(10, "test");

 

 

    出现这种结果是对的,就是过程上看不到 从 ProgressBar(10, "test");到  ProgressBar(80, "test");
的过程,而是光标闪烁一段时间后(程序在运行)直接显示这个效果 ,还有就是如果ProgressBar()后都加上putchar(10)

倒是可以按应有的顺序print出来: