一段简单程序为什么在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出来: