赞
踩
缓冲区分为:无缓冲、行缓冲、全缓冲。
关于行缓冲有3个实例:
现象是什么?
先打印Hello,world!
三秒后换行打印apple@AppledeMacBook-Pro Linux %
现象是什么?
停顿3秒后先打印Hello,world!%
(这里为啥跑出来了 % 我也不是很懂),再换行打印apple@AppledeMacBook-Pro Linux %
现象是什么?
停顿3秒后先打印Hello,world!
,再换行打印%,并换行打印apple@AppledeMacBook-Pro Linux %
结论:
printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷新缓冲区的条件如下:
缓冲区填满;
写入的字符中有‘\n’ ,’\r’;
调用fflush手动刷新缓冲区;
调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新;
满足上面4个条件之一缓冲区就会刷新
功能: 清除读写缓冲区,在需要立即把输出缓冲区的数据进行物理写入时
fflush(stdin):刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]
fflush(stdout):刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上
usleep函数能把进程挂起一段时间, 单位是微秒(千分之一毫秒)。本函数可暂时使程序停止执行。头文件:<unistd.h>
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(){ char arr[102] = {0}; const char* lp = "|/-\\"; for(int i = 0; i < 100; i++){ arr[i] = '#'; printf("[%-100s][%d%%][%c]\r", arr, i+1, lp[i % 4]); fflush(stdout); usleep(100000); } printf("\n"); return 0; }
代码生成图
如有不同见解,欢迎留言讨论~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。