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 }

而这样写的结果是这样的

image-20230214154214780

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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃跑的机械工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值