点击左上方蓝色“一口Linux”,选择“设为星标”
一、回车与换行
换行是换到下一行的当前位置,一般用\n表示。回车是回到当前行的开始,一般用\r表示。
但一般在语言,比如C语言中,用\n代表换行+回到开始。
二、缓冲区
先来看两段代码及其现象。
第一段代码,代码很简单,主要是为了与第二段形成对比。
#include
#include
int main()
{
printf("I am a proc\n"); //有\n
sleep(3);
return 0;
}
#include
#include
int main()
{
printf("I am a proc"); //没有\n
sleep(3);
return 0;
}
事实上,上面的代码中由于printf在sleep之前,所以printf永远先于sleep执行,但是先执行printf不代表先打印。
printf执行后,要打印的内容放入缓冲区,但不一定会被立即刷新到屏幕上。
全缓冲:直到把缓冲区全放满才会刷新。
再结合上面两段代码及现象,可以得出上面打印时采用的是行缓冲(遇到\n就把要打印的内容打印在屏幕上)。
三、倒计时的程序
如果每次打印完都回车,就相当于在第一个位置打印一个数字后,又回到该位置,继续打印下一个数字。这样就可以实现倒计时的效果。
#include
#include
int main()
{
int count = 3;
while(count >= 0)
{
printf("%d\r", count--);
sleep(1);
}
return 0;
}
#include
#include
int main()
{
int count = 3;
while(count >= 0)
{
printf("%d\r", count--);
fflush(stdout);
sleep(1);
}
return 0;
}
但如果是两位或更多位的倒计时,就会出现如下的问题:
#include
#include
int main()
{
int count = 10;
while(count >= 0)
{
printf("%d\r", count--);
fflush(stdout);
sleep(1);
}
return 0;
}
#include
#include
int main()
{
int count = 10;
while(count >= 0)
{
//控制输出两位字符
printf("%2d\r", count--);
fflush(stdout);
sleep(1);
}
return 0;
}
四、进度条程序
#include
#include
#include
void ProcBar()
{
int i = 0;
char proc[102];
memset(proc, '\0', sizeof(proc));
while(i <= 100)
{
//C语言格式控制时默认右对齐,所以要在前面加-变成左对齐
printf("[%-100s] [%d%%]\r", proc, i);
fflush(stdout);//刷新屏幕打印
proc[i] = '#';
usleep(100000);//以微秒为单位的sleep
i++;
}
printf("\n");
}
int main()
{
ProcBar();
return 0;
}
来源:入门小站
文章转自网络,版权归原作者所有!如有侵权,请联系我删除!
end
一口Linux
关注,回复【1024】海量Linux资料赠送
精彩文章合集
文章推荐