cin将小数输入给整形变量(cin>>float to int)

首先关于输入的几个基本概念:

  1. 我们从键盘输入的值会先存储到内存中一个部分:键盘缓冲区。系统在执行到cin>>时,会检测键盘缓冲区中有无内容,有则读入,没有则等待我们从终端输入。
  2. cin有一个函数叫做fail(),如果cin读取的过程中出现错误,cin.fail()就会返回true。而且,在此之后的cin>>都会因为cin.fail()==true而不被执行。除非使用cin.clear()来清除这个错误标志。
  3. 对于代码int a;cin>>a; ,其中cin在对整数输入错误时,会先将整数变量赋值为0(跟编译器有关),然后再设置cin内部的错误标识设置为true

以下代码为例:

int main()
{
    int a=-11,n=-22,m=-33;//对变量初始化,如果输出的变量值未变,则说明cin代码未生效
	cin>>a;
	if(cin.fail())
		cout<<"cin fail! a="<<a<<endl;
	else
		cout<<"success! a="<<a<<endl;
    
    cin>>n;
	if(cin.fail())
		cout<<"cin fail! n="<<n<<endl;
	else
		cout<<"success! n="<<n<<endl;

	//cin.clear();
	cin>>m;
	if(cin.fail())
		cout<<"cin fail! m="<<m<<endl;
	else
		cout<<"success! m="<<m<<endl;
}

输入2.3 输出是2 0 -33


执行的步骤如下:

  1. 系统执行到cin>>a时,此时键盘缓冲区啥也没有,会等待我们的输入。然后输入2.32.3进入缓冲区,cin开始读取。由于cin函数想要获得的是一个整数,所以它会读取到2,后一个字符是.不属于整数,cin 便停止,但并不属于失败。
  2. 现在缓冲区残留的是.3,执行到cin>>n的时候,.3并不是一个有效的整数,此时cin会出错,首先将该变量初始化为0(所以输出n=0),其次将cin的错误标识置为true
  3. 现在执行到cin>>m,由于cin的错误标识为true。所以,这句话并未执行,直接跳过。输出m=-33表示m并未被赋值。后面无论有多少个cin>>x,变量x都不会被赋值

有几个实验可供验证:

  1. 输入不变,将int n=-22;改为char n="o"
  2. 去除cin.clear()的注释
  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值