输入缓冲区
通过终端输入的数据会先存入在输入缓冲区中,前面数据输入的数据可能会影响后续数据的输入
典型残留垃圾的情况:
先输入整数、浮点数据,再输入字符或字符串
清理缓冲区的方法:
1、 通过正则表达式清理缓冲区
scanf("%*[^\n]");
scanf("%*c);
%:拿数据
*:丢数据
[^\n]:数据丢到至\n
缺点:确定缓冲区中有残留的数据
2、 调整缓冲区位置指针(将缓冲区的当前位置指针直接改到指向末尾)
stdin->_IO_read_ptr = stdin->_IO_read_end
输出缓冲区
通过printf/puts/putchar等输出函数显示的数据并不会立即显示在终端上,数据被放在了缓冲区当中
需要满足特定的条件才能显示出来:
1、当从输出状态切换到输入状态
2、当遇到"\n"
3、当数据满4k
4、程序结束(会把缓冲区中残留的数据立即显示出来)
5、强制刷新 fflush(stdout);