istream类重载了抽取运算符<< , 所以cin >> 支持c++内置的所有基本数据类型。cin对象将标准输入表示为字节流,然后根据抽取 运算符<<(本质就是一个函数)的参数类型对字节流进行类型转换,转换为所需的类型。
不同版本的抽取运算符查看输入流的方法是相同 的。他们跳过空白(空格、换行符、和制表符),直到遇到非空白字符。当输入没有满足程序期望的时候,比如对于一个int类型的变量a,却输入字符H,这种情况下,抽取运算发将不会改变变量a的值,并返回0,。
测试代码如下:
//check_it.cpp -- checking for valid input
#include <iostream>
int main()
{
using namespace std;
cout << " Enter numbers:";
int sum = 0;
int input;
while ( cin >> input )
{
sum += input;
}
cout << "Last value entered = " << input << endl;
cout << "sum = " << sum << endl;
return 0;
}
运行效果如图:
由于输入被缓冲。因此通过键盘输入的第二行在用户按下回车键之前,不会被发送给程序。然而循环在字符z处停止了对输入的处理,因为z不予int类型相匹配。输入与预期格式不匹配反过来将导致表达式cin>>input的返回值为false,因此while循环被终止。