将字母输入给int型变量的情况

洛谷P1957口算练习题,输入的数据可能是三个(第一个是字符,后两个是整型) 也可能是两个(都是整型)。

原因:cin有一个特性,如果定义了一个int型的变量,输入这个变量时就会检测输入的是不是数字。如果程序发现用户输入了错误内容时(输入的不是int型),程序就会锁住cin。

如何解决:判断是否输入错误,若输入错误就执行 cin.clear(); ,以重置cin状态,使程序能继续读入其他数据。这时输入的错误数据还会在缓冲区中,继续输入数据的话,还是会从这个数据开始读取。

例如:

int a = 1, b = 2, c = 3;
cin >> a >> b >> c;
cout << a <<   << b <<   << c <<endl;
//输入:6 a 8
//结果:6 0 3

对该题:

int num[2];
char k;
//对输入两个或三个类型的处理 
if(!(cin>>num[0]))  //若读入的数据不是int型
{
          
   
	cin.clear();	//解锁
//先把刚刚输入的数据存到char型变量中,cin才不会再次被锁
	cin>>k>>num[0]>>num[1];	
}
else	//若输入的第一个数据是int型,则继续输入下一个
	cin>>num[1];
经验分享 程序员 微信小程序 职场和发展