c语言中回车vs换行你真的理解了吗

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 }

而这样写的结果是这样的

c语言中回车vs换行你真的理解了吗_第1张图片

显然这不是我们想要的结果,我们想打印数字之后,光标重新回到行首位置,应该使用“\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 }

打印出来的结果是这样的

image-20230214173027691

你可能感兴趣的:(Linux,c语言,开发语言)