C++中get()函数的一些说明

众所周知在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      黯風夜隱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值