一段簡單程序爲什麼在linux終端與win控制檯下運行效果不同?(望高手指點)

    一段簡單程序爲什麼在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出來:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章