*关于scanf,cin,getline,gets()缓冲区的小结:
看了很多大佬的博客,但是对于我这个新手来说很多看不懂,不过这位博主的文章个人感觉比较接地气,比较易懂:
这里是引用
https://blog.csdn.net/as14569852/article/details/77502990
先了解缓冲区。
除了一整行一整行读的操作(如gets(),getline()),
其余的操作(如:cin,scanf,包括getchar())都会将空格符或者回车符当作是结束符放在缓存区(放在缓存区好像是为了提高cpu效率,)
停止读入之后再从缓冲区读入,遇到空格或者回车符停,停止后结束符仍然在缓冲区,若要避免错误,一个好方法是用一个getchar()将结束符读取,这样就不会造成错误了
可以认为gets和getline之后的缓存区是干净的,其余操作会将结束符留在缓存区,造成读入不是自己想要的。
一个简单方法,用getchar()将缓存区的结束符读掉!
注意:列如:char op;op=getchar();这样也会留一个结束符在缓存区。
在op=getchar()后面在加一个“getchar()”这样就可以解决啦!