cin.getline对cin.gcount()的影响

本文探讨了cin.getline()函数在读取字符串时如何影响cin.gcount()的返回值。通过分析代码和iostream库的内部实现,揭示了当输入包含换行符时,cin.gcount()为何会返回不同的结果。示例代码和MSDN文档进一步解释了gcount()的功能,即返回最近一次未格式化输入操作所读取的字符数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2011-05-08 wcdj

 

问题

测试下面代码,解释cin.gcount的输出为什么会不同?

 

分析

getline()是按行读入字符串,后面可以指定2个参数或3个参数,其在istream中的实现如下:

可以看出,两个参数的getline()实际也是调用了以'/n'为结束符的三参数getline()函数。
同时当我们单步进入getline()的实现我们会发现这样的判断语句:

所以在对于输入 12345789 时,在最后我们输入了 '/n',因此在判断时,计数器仍然加1,而相对当我们输入 1234567890 时,在判断 a[9] 时,由于--_Count <= 0,所以计数器没有被递加,因此在产生了区别。

 

结论:
通过对getline的分析,可以找到输出结果不同的原因。


PS:

 

MSDN:

basic_istream::gcount
Returns the number of characters read during the last unformatted input.



Return Value
The extraction count.
Remarks
Use basic_istream::get to read unformatted characters.
Example

Requirements
Header: <istream>
Namespace: std


参考

istream::getline
http://www.cplusplus.com/reference/iostream/istream/getline/
istream::get
http://www.cplusplus.com/reference/iostream/istream/get/
basic_istream::gcount
http://www.cplusplus.com/reference/iostream/istream/gcount/
http://msdn.microsoft.com/zh-cn/library/3w9exa29%28v=VS.90%29.aspx
cin.getline()
http://blog.youkuaiyun.com/kof2001kop/archive/2011/04/03/6299778.aspx
http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/bacc495d-1170-4a20-90b6-80a37ba3d5b5

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值