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