cin特性,你的程序里的循环中的cin为什么没有再次执行。

cin特性,你的程序里的循环中的cin为什么没有再次执行。

以下代码十分简单,while无限循环,每次循环都要输入一个数,当这个数是1的时候,程序输出一个1。

#include<iostream>
using namespace std;
int main() {
    
    
	int n;
	while (1) {
    
    
		cout << "请选择:" << endl;
		cin >> n;
		if (n == 1)
			cout << 1 << endl;
	}
	return 0;
}

图中可见,输入2和3的时候什么都没有发生,开始了新一轮循环,输入1的时候触发了if语句输出了一个1。但是当输入一个a的时候程序出现了问题,cin似乎不起作用了。
在这里插入图片描述
当我们设置一个断点发现这个cin语句还执行了一次,似乎是cin内部某些判定跳过了此次cin的运行。
在这里插入图片描述
出现这种问题的原因是cin函数依次从输入流中提取数据为变量一一赋值,当提取到我们为变量n赋的值’a’时,由于我们尝试将字符类型赋予一个整型变量,两者类型并不一样,C++会自动设置输入失效位,并关闭输入,此后所有的cin语句都不会被执行,错误的输入a会保留在输入流中,但程序不会终止,照常执行其他语句。

本文章结论:原因是你用cin将一个错误的数据类型赋值给了变量,导致该句以后的cin都不会执行。

特别感谢前辈:https://blog.csdn.net/weixin_42487598/article/details/86616829
特别感谢群友:hopeisadangerousthing

猜你喜欢

转载自blog.csdn.net/weixin_51343683/article/details/109014584
cin
今日推荐