1.回车vs换行
回车:光标回到该行首位置
换行:光标移动到当前位置的下一行位置,比如当前光标在第一行第三列,那么换行之后就是第二行第三列;
我们在编写c语言代码的时候,经常使用“\n”,其实他的含义并不是回车,而是换行+回车,而如果我们只想回到该行首位置的话,要使用“\r”。因此我们要知道我们平时把“\n”说成回车是一种不太严谨的行为。
2.c语言如何实现倒计时
如果我们在没有深刻的理解回车和换行的关系之前,我们写一个倒计时的代码可能会写成这样
1 #include <stdio.h>
2 #include <unistd.h>
3 int main()
4 {
5 int count = 9;
6 while(count)
7 {
8 printf("%d\n", count);
9 fflush(stdout);
10 count--;
11 sleep(1);
12 }
13 return 0;
14 }
而这样写的结果是这样的
显然这不是我们想要的结果,我们想打印数字之后,光标重新回到行首位置,应该使用“\r”,我们主要将代码中的“\n”修改成“\r”就好了
1 #include <stdio.h>
2 #include <unistd.h>
3 int main()
4 {
5 int count = 9;
6 while(count)
7 {
8 printf("%d\r", count);
9 fflush(stdout);
10 count--;
11 sleep(1);
12 }
13 return 0;
14 }
3.c语言实现进度条
1 #include <stdio.h>
2 #include <string.h>
3 #include <unistd.h>
4 void progress()
5 {
6 const char* lable = "|/-\\";
7 char bar[101];
8 memset(bar, '\0', sizeof(bar));
9 for(int i = 0; i <= 100; i++)
10 {
11 //printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%4]);
12 //你可以使用颜色控制使进度条变得更美观
13 printf("\033[42;34;4m[%-100s]\033[0m[%d%%][%c]\r", bar, i, lable[i%4]);
14 fflush(stdout);
15 usleep(50000);
16 bar[i] = '#';
17 }
18 printf("\n");
19 }
20 int main()
21 {
22 progress();
23 return 0;
24 }
打印出来的结果是这样的