cin将小数输入给整形变量(cin>>float to int)
2018-03-27 00:57
1301 查看
首先关于输入的几个基本概念:
我们从键盘输入的值会先存储到内存中一个部分:键盘缓冲区。系统在执行到
对于代码
以下代码为例:
输入
执行的步骤如下:
系统执行到
现在缓冲区残留的是
现在执行到
有几个实验可供验证:
输入不变,将
去除
我们从键盘输入的值会先存储到内存中一个部分:键盘缓冲区。系统在执行到
cin>>时,会检测键盘缓冲区中有无内容,有则读入,没有则等待我们从终端输入。
cin有一个函数叫做
fail(),如果
cin读取的过程中出现错误,
cin.fail()就会返回true。而且,在此之后的
cin>>都会因为
cin.fail()==true而不被执行。除非使用
cin.clear()来清除这个错误标志。
对于代码
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
执行的步骤如下:
系统执行到
cin>>a时,此时键盘缓冲区啥也没有,会等待我们的输入。然后输入
2.3,
2.3进入缓冲区,
cin开始读取。由于
cin函数想要获得的是一个整数,所以它会读取到
2,后一个字符是
.不属于整数,
cin便停止,但并不属于失败。
现在缓冲区残留的是
.3,执行到
cin>>n的时候,
.3并不是一个有效的整数,此时
cin会出错,首先将该变量初始化为0(所以输出
n=0),其次将
cin的错误标识置为
true。
现在执行到
cin>>m,由于
cin的错误标识为
true。所以,这句话并未执行,直接跳过。输出
m=-33表示
m并未被赋值。后面无论有多少个
cin>>x,变量x都不会被赋值
有几个实验可供验证:
输入不变,将
int n=-22;改为
char n="o"
去除
cin.clear()的注释
相关文章推荐
- js中数字型的变量转化成int,float以及取几位小数
- JNI函数void-->int 传入整形变量
- C++中cin>> cin.get(char[], int) cin.getline(char[], int) cin.get(char)输入区别
- 标准输入cin的返回值以及while(cin>>x)的问题
- C++中cin>>、cin.get()、cin.getline()、getline()、gets()输入函数详解
- C++中从整形转换到字符串型(int to string)
- Java 数据类型转换,String->float,float->int ,String<->int (2013-07-24 14:01:57)
- C++文件结束符(Ctrl+Z)后如何继续输入(cin>>)。
- C++ 输入函数 cin>>、cin.getline()和cin.get()区别
- C++ 输入函数getline(cin,str) 与cin.getline(str,int)区别
- 关于while(cin>>str)输入无法结束的问题(转+修改)
- 标准输入cin的返回值以及while(cin>>x)的问题
- keil(MDK)中出现error: #513: a value of type "int" cannot be assigned to an entity of type "char *",即函数返回值无法赋值给对应变量的错误
- PHP中float变量转换为int时,结果有误的问题!
- [Algorithms, C] long2char: 自己用C写来玩玩的整形转化为字符串函数 (递归和迭代两种实现): void long2char(long from, char *to, int n);
- 文件输入cin>>的返回值
- JavaSE7基础 强制转换 int->byte(int变量的数值在byte类型范围内)
- Float类的floatToIntBit方法
- <input>标签 只输入 数字 int类型
- 分别写出BOOL,int,float,指针类型的变量a与“零”的比较语句