众所周知在C++中的标准输出流类是cin,get()便是其中的一个成员函数,它有三个重载:
cin.get() cin.get(char ch) cin.get(array_name, Arsize)
对于后两个重载没什么好说的,但第一个重载却有些神奇的特性。用它着重复输入时,大家都会发现,它将回车保留在上一个缓冲区中,即:在上一个缓冲区中有值。
如:
for(i=0;i<3;i++) { for(j=0;j<3;j++) { ch=cin.get(); a[i][j]=ch; } }
这个程序是把输入的字母一个一个放进数组中:
如:abc
efd
hij
这个程序看似没什么问题,但吃过get()苦的人都知道这样是不行的。原因很简单,在下一个j循环开始时,第一个数据不是e,而是回车!这就是回车保留在缓冲区的意思。
但如果在前面还有cin如:
cin>>k; for(i=0;i<3;i++) { for(j=0;j<3;j++) { ch=cin.get(); a[i][j]=ch; } }
那就更是不得了了,反正我也是只知道是这样,但不知道为什么,get第一个读的回车,是前一个cin中的回车。好了,我们就是应避免这些问题,所以我们应在知道有回车的地方加上cin.get()就行了。
但对于初学者的我们,有一个更好的办法,就是及时更新流文件,使其回车及时消失,如:用cin.sync();即可消除其中的回车。
记于2009.7.20 黯風夜隱