您的位置:首页 > 编程语言 > C语言/C++

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

2017-06-06 23:22 337 查看
        在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 输入流 cin 清除 清空
相关文章推荐