假设要编写一个将一系列数字读入到数组中的程序,并允许用户在数组填满之前结束输入。一种方法是利用cin.
请看下面的代码:
int n;
cin>>n;//注意:cin>> 读取并忽略开头所有的空白字符(如空格,换行符,制表符),读取直至再次遇到空白字符,读取终止。
如果用户输入一个单词,而不是一个数字,情况将如何呢?发生这种类型不匹配的情况时,将发生4种情况:
1.n的值保持不变
2.不匹配的输入将被留在输入队列中,输入流中
3.cin对象中 的一个错误标志被设置
4.对cin方法的调用将返回false(如果将转换为bool类型)。
方法返回false意味着可以用非数字输入来结束读取数字的循环。非数字输入设置错误标志,意味着程序继续读取输入会失败,
必须重置该标记,程序才能继续读取输入,。clear()方法重置错误输入标记,同时也重置文件尾(EOF条件).输入错误和EOF
都将导致cin返回false.
例:
#include <iostream>
using namespace std;
int main()
{
int ival;
while(cin>>ival)
{
cout<<ival<<endl;
}
if(cin.fail())
{
cout<<"error"<<endl;
cin.clear();
cin.sync();
cin>>ival;
cout<<ival<<endl;
}
return 0;
}