存在问题
假设让用户输入一个数字,而用户输入的是一个单词,会发生什么?
-
值保持不变
-
不匹配的数保持在输入序列中
-
cin的错误标记被设置
-
对cin方法调用将返回为false(被转换为bool类型)
int n; cin>>n;//输入一个字符串
如果非数字输入必须重置该标记,程序才能继续输入.
clear()方法重置错误标记
输入错误和EOF都将导致cin返回false
cin>>n实际上是一个cin方法调用
解决方案
- 重置cin以接受新的输入S
- 删除错误输入
- 提示用户再输入
代码
int n;
while(!(cin>>n))
{
cin.clear();
while(cin.get() != '\n')
continue;
cout<<"\t 请输入一个数字:";
}
若用户输入10,则程序返回true,!取反,则退出while循环,若用户输入CPP,cin返回false,!取反,则程序进入while循环.
使用cin.clear();方法重置cin输入.接下来程序使用cin.get()来读取行尾之后的所有输入,来删除错误输入.最后程序提示,让用户重新输入一个数字.