关于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);
}
简单的处理过程如下所示:
#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++中给int变量输入字符引起的死循环解决方法
- 关于jquery html()方法获取带有OBJECT标签的元素内容时,出现“类型不匹配。”的解决办法
- C++中cin输入类型不匹配解决方法
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 第01章 CORE C++_C++ 基本结构_注释_输出语句_输入语句_初始化_条件控制_ASCII码值_转义字符_常量_变量_类型长度_运算符
- 关于限制edit控件中输入变量的类型的问题
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 关于Excel中手机号码导入MSSQL中变成Double类型解决办法
- 向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法
- C++中同一类中参数名和变量名相同时出错,解决办法有两种
- 向ACCESS中的"时间/日期"字段中插入DateTime.Now时出现“标准表达式中数据类型不匹配。”错误的解决办法
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 关于类型“System.Web.UI.ScriptManager”不明确的解决办法
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法
- 关于loose.dtd和xhtml1-transitional.dtd等文档类型定义模型中CSS失效的解决办法。
- eclipse中的关于scanf和printf的输入顺序的解决办法