接下来通过编写一个进度条小程序来学习了解一些小知识。
目录
回车换行概念
我们在计算机的日常使用中,常常认为回车换行是一个动作,即键盘上的enter键实现。但实际上回车代表的是将光标刷新至行起始位置,换行是指将光标刷新至同一列的下一行。下面通过代码来实验一下:
代码一:
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("hello world!\r");
6 return 0;
7 }
代码二:
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("hello world!");
6 return 0;
7 }
上述的\r表示回车,即将光标刷新至起始行的位置。两段代码运行结果如下:
代码一:
代码二:
缓冲区概念
首先我们先来看两段代码及其运行结果。
代码一:
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("hello world!\n");
6 sleep(3);
7 return 0;
8 }
代码二:
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("hello world!");
6 sleep(3);
7 return 0;
8 }
由于代码执行结果不便保存,所以这里口述表达,自己也可以下去实验下。首先代码一的运行结果是:打印 “hello world!” 字样,然后光标闪烁3秒结束程序。代码二的运行结果是:光标闪烁3秒后,打印字样并结束程序。
原因如下:printf函数输出的内容与最终显示在屏幕上之间存在着一个缓冲区,输出内容会先进入缓冲区后在刷新到屏幕上。为了验证,我们可以通过fflush函数在打印后立即刷新。代码如下:
1 #include<stdio.h>
2 #include<unistd.h>
3
4 int main()
5 {
6 printf("hello world!\n");
7 fflush(stdout); // 立即刷新显示器
8 sleep(3);
9 return 0;
10 }
进度条小程序
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<string.h>
4 #define NUM 100
5
6 int main()
7 {
8 char arr[NUM+1];
9 memset(arr, '\0', sizeof(arr));
10
11 const char* label = "|/-\\";
12 int i = 0;
13 while(i <= 100)
14 {
15 printf("[%-100s][%3d%%] %c\r", arr, i, label[i%4]);
16 fflush(stdout);
17 arr[i] = '#';
18 i++;
19 usleep(50000);
20 }
21 printf("\n");
22 return 0;
23 }
下面对进度条程序中重要行代码加以解释:
9行:使用“\0”初始化数组arr
15行:打印进度条,-100表示左对齐留足100个字符位
16行:对应上述“缓冲区的概念”,每次循环后立即刷新
Linux代码上传至gitee
1、在gitee上创建代码仓库
2、在Linux上安装git工具 - yum install git
3、在Linux上创建仓库目录文件 - git clone url
url:仓库链接
4、将需要上传的代码文件放至仓库目录下 - cp 文件名 仓库目录名
5、三板斧 - 进入到仓库目录下
git add 文件名
git commit -m “文件说明”
git push