C++ cin 的过程

从一段代码开始:

int main() {
	int a, b;
	cin >> a >> b;
}

首先阻塞在 cin >> a >> b 中,等待用户输入,用户可以一直输入,直到输入了回车,这时一个以 \n· 结尾的字符串就会输入到cin 的 character 队列中,cin >> a >> b 会让 cin 从左到右遍历,直到遇到一个空格或回车,然后截取并判断空格之前的字符是否可以转为 int 类型,如果可以,则赋值给 a 变量。如果不可以,比如是一个字符 q 或者 double 类型 3.14,此时 cin 会指向一个 NULL,防止进一步从 character 队列中获取读取字符,此时 if (cin) 会判为 falsewhile (cin) 也会跳出循环。

在这里插入图片描述

如上图所示,当输入回车 \n 后,所有之前输入的字符串12 23 45 qw \n 都会进入 cin 的 character 队列,然后 cin 开始从左往右读取,遇到第一个空格后,得到 12,是一个 int 类型,于是可以赋值给 a 变量,此时 cin 会忽略空格,获取下一个非空格和回车的字符,比如 23,是一个 int 类型,于是继续赋值给 b 变量。如果 12 后面的不是 23,而是一个字母 b,如下所示,则 cin 将指向 NULL,从而阻止继续从 character 队列中读取字符。

在这里插入图片描述

如果要让 cin 继续可用,可以调用 cin.clear(),cin 将从上次失败的位置继续按需读取字符,如下所示:

在这里插入图片描述

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值