换行&&回车区别
·回车概念
回到当前行的最开始
·换行概念列不变,新起一行
'\n':表示的就是回车+换行
'\r':表示的是只回车不换行
行缓冲区概念
以下代码什么现象?
[yyh@ecs-86081 probar]$ cat mycode.c #include<stdio.h> #include<unistd.h> int main() { printf("hello world\n"); sleep(5); return 0; }有\n时,printf的内容会立即打印到显示器上,然后sleep休眠五秒。这个例子也就说明了\n具有刷新缓冲区的作用。
以下代码什么现象?
hello world[yyh@ecs-86081 probar]$ cat mycode.c #include<stdio.h> #include<unistd.h> int main() { printf("hello world"); sleep(5); return 0; }当没有\n时,printf里面的内容不会立即显示出来,而是会暂时保存起来,保存在了用户C语言级别的缓冲区中,sleep五秒过后才会显示到显示器,并且与下一条命令不存在换行。
以下代码什么现象?
[yyh@ecs-86081 probar]$ cat mycode.c #include<stdio.h> #include<unistd.h> int main() { printf("hello world"); fflush(stdout); sleep(5); return 0; }fflush会刷新缓冲区,所以不需要带\n就可以立即显示到显示屏上,然后再sleep休眠五秒。
C语言程序,默认会打开三个输入输出流:
stdin stdout stderr
键盘 显示器 显示器
注意:凡是显示到显示器上面的内容都是字符(例如像123显示到显示器中,实际上是1字符2字符3字符)。凡是从键盘中读取的内容也都是字符。所以显示器和键盘这样的设备都称之为字符设备。
进度条代码
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4 #define NUM 100
5 int main()
6 {
7 char bar[NUM+1];//多给一个空间用来存放\0
8 memset(bar,'\0',sizeof(bar));
9 int i = 0;
10 const char* lable="\\/-\\";//用以打印不断旋转的光标,注意反斜杠\是一个特殊的字符,需要用\\来转义得到'\'
11 while(i<=100)
12 {
13 printf("[%-100s][%d%%]%c\r",bar,i,lable[i%4]);
14 //注意加上\r用以回车
15 //两个%%表示打印一个%
16 //-100s表示自左向右打印100个字符
17 //lable需要%上4,因为要循环打印
18 fflush(stdout);//刷新缓冲区
19 bar[i]='#';//每一次比上一次多一个#号
20 i++;
21 usleep(50000);//基于us级别的休眠,这里的50000us相当于0.5s
22 }
23 printf("\n");
24 }
运行结果:
[yyh@ecs-86081 probar]$ ./proc [####################################################################################################][100%]/
版权声明:本文为weixin_56054625原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。