关于C++中输入与变量类型不匹配的解决办法

        在C++控制台程序中,常常需要用cin输入某个类型的变量,但是因为客户可能输入与变量类型不相符的情况。此时需要在处理数据前判断输入是否正确,不正确的时候重新输入。

        简单的处理过程如下所示:

#include <iostream>
using namespace std;

int main()
{
	int nFunc = -1;
	do 
	{
		cout << "AAA: ";

		if (cin >> nFunc)
		{
			int n = 1;
		}
		else{
			continue;
		}
		switch (nFunc)
		{
		case 1:
			cout << "111\n";
			break;
		case 2:
			cout << "222\n";
			break;
		default:
			break;
		}
	} while (nFunc!=0);
}

        以上代码的目的是,当输入的不是整型数的时候(如输入w),继续循环,重新输入nFunc。实际观察可以看到,程序并不会给第二次输入的机会,而是会不断输出AAA: 。

        产生上述的原因我觉得应该是错误格式的w被一直放在输入流中,导致每回cin都是取到w,然而w并不是我们要的int格式,所以一直输出AAA。解决办法是清空输入流的数据。这里如果用C的fflush(stdin)是没有用的,应该使用C++的clear等方法。具体如下所示:

#include <iostream>
using namespace std;

int main()
{
	int nFunc = -1;
	do 
	{
		cout << "AAA: ";
		cin.clear();	// 重置 cin 输入状态
		cin.sync();	// 清除 cin 缓冲区未读取信息
		if (cin >> nFunc)
		{
			int n = 1;
		}
		else{
			continue;
		}
		switch (nFunc)
		{
		case 1:
			cout << "111\n";
			break;
		case 2:
			cout << "222\n";
			break;
		default:
			break;
		}
	} while (nFunc!=0);
}




  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值