复习:
1、输出缓冲区
程序输出的数据并没有立即写入"文件",而是先存储到输出缓存区中,当满足一定条件时才写入文件中:
1、遇到'\n'
2、遇到输入语句
3、缓冲区满4k
4、程序结束
5、手动刷新 fflush(stdout) windows没有
2、输入缓冲区
从终端输入的数据,按下回车后,会从终端存储进输入缓冲区中,在执行输入函数时,会从输入缓冲区读取相应的数据
1、当想要从缓冲区中读取整型、浮点型数据,而缓冲区中的数据是字符、字母时,此次读取会失败,
而且不会从缓冲区中拿走该数据,导致接下来所有数据的读取都出问题
解决方法: 根据scanf的返回值判断是否全部成功接收数据,否则就清空缓冲区再重新输入
stdin->_IO_read_ptr = stdin ->_IO_read_end;
2、使用fgets输入时,超过size-1个字符就会残留在输入缓冲区中,影响下一次的输入
解决方法:判断缓冲区中是否会有'\n',如果有
scanf("%*[^\n]");
scanf("%*c");
或者
stdin->_IO_read_ptr = stdin ->_IO_read_end;