对scanf和printf的研究!!
在做项目的时候,突然很纠结要不要清理。所以赶紧写一篇博客记一下!!
1. scanf函数
在代码中,如果碰到了两个挨着输入的情况,就会出现问题!!
输入一个字符 r 就会出现一下情况!!
第2句scanf不能正常接收字符。因为我们每敲一下”Enter”键,向键盘缓冲区发去一个“回车”(\r),一个“换行”(\n),在这里\r被scanf()函数处理掉(执行拿数据),而\n被scanf()函数保留。
因此每次输入完字符或者字符串给输入缓冲区清流,是很有必要的。
只要在两个scanf函数之间加一句
stdin->_IO_read_ptr=stdin->_IO_read_end;
即可解决stdin流堵住问题(加getchar() 也会起到相同的作用),格式不匹配导致的阻塞缓冲区的问题也可以解决!
scanf 的返回值: 一共输入了几个数字、字符的个数和。
2. printf函数。
代码中出现一下问题,printf不会输出!
此时输出为空。
但是加上清理输出缓冲区fflush(stdout);即可!
3.两者的相关性!!
输入、输出缓冲区
当程序输出数据时,数据没有直接到达屏幕,而存储在了缓冲区中(为了提高程序的运行效率),当满足一定的条件后才能显示出来:
1、遇到'\n';
2、从输出状态切换到输入状态时(调用scanf,getchar,getch,gets);
3、数据量达到4K(满了);
4、刷新缓冲区,调用fflash(stdout);
5、程序结束;