再论cin 与getline

      很多书上,都很笼统的说,cin用于提取输入缓冲区的字符,且自动转换赋给接收的变量(如char 、int 、double等类型),以空白字符(blank、\n ,\t)作为分隔提取,getline用于提取整行数据,以换行符作为分隔。

     具体的说,cin在开始提取的时候,会跳过所有空白字符(blank,\n,\t),直到第一个非空白字符才开始提取,对于提取字符串(string类型)而言,然后就会一直提取直到遇到空白字符,结束提取。此时,空白字符不会被丢弃,仍然留在输入缓冲区内;对于其他类型(如int),则会一直提取到不属于该类型的字符截止。如果遇到类型错误,cin就会置failbit位为有效位1,然后返回。如果遇到文件结尾,就置eofbit位为有效位1,遇到I/O错误,就置badbit位为有效位1。上述三者可以重合。

    getline会直接提取,不做开始的检查,直到看到换行符(\n),然后停止提取,并且,将换行符从输入缓冲区中丢弃,这样,下一次提取就是换行符之后的数据。

    因此,当程序混合使用cin,getline读取数据时,特别是字符串,就要特别注意。

    比如假设cin读取字符串,看到换行符结束提取,然后又用getline提取时,就会得到一个空行,failbit位就会被置为有效位,就是因为getline看到了换行符,然后就直接返回了。

 

转载于:https://www.cnblogs.com/easyFancy/archive/2013/04/06/3002243.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值