简单的进度条程序 ------行缓冲区概念,/r与/n的区别

先来了解以下:
/r 与 /n 的区别:
’\r’是回车,前者使光标到行首,(carriage return)
'\n’是换行,后者使光标下移一格,(line feed)

\r 是回车,return
\n 是换行,newline

行缓冲区概念
行缓冲:在I/O操作时,输入输出遇到换行符时进行,进行真正的I/O操作。对于行缓冲,标准I/O每一行缓冲区的长度是固定的,所以只要填满了缓冲区,即使没有遇到换行符,也换刷新缓冲区。
当然除了换行,我们也可以进行手动刷新缓冲区:这里用到的C语言提供的 fflush 功能。
看下面的代码:
在liunx环境下:

#include <stdio.h>
#include<unistd.h>
int main()
 {    
 printf("hello world!\n");   
  sleep(3);    
  return 0; 
  }

什么现象?
先打印出 hello world!后睡眠三秒,程序退出

#include <stdio.h>
#include<unistd.h>
int main()
 {    
 printf("hello world!");   //去掉换行符
  sleep(3);    
  return 0; 
  }

什么现象?
先睡眠三秒,后打印出 hello world!,程序退出。
造成这两个现象的原因就是:这里的换行符刷新了缓冲区。
使用fflush手动刷新缓冲区:

#include <stdio.h>
#include<unistd.h>
int main()
 {    
 printf("hello world!");   //去掉换行符
 fflush(stdout);			//刷新输出缓冲区
  sleep(3);    
  return 0; 
  }

结果与使用换行符相同。
好了 ,内容很简单,看了是上面,我们再来看看一个简单的进度条的代码:

#include<stdio.h>
#include<string.h>
#include<unistd.h>
int main()
 {
 
    const char* change = "|/-\\";
    char bar[102];
    memset(bar,0,sizeof(bar));
     int i = 0;
     while(i<=100)
     {
         printf("[%-100s][%d%%][%c]\r",bar,i,change[i%4]);
        fflush(stdout);
         bar[i] = '#';
         i++;
        usleep(100000);                                                                                                          
     }
      printf("\n");
     return 0;
 }

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值