如果键盘输入的类型和区间错误,该如何限制呢?
//先给大家个小的程序(功能就是输入个数字,输出比他大一的数字):
//程序1,没有错误,呵呵,不需要修改了
#include <iostream> //我的这个可以限制区间,即输入的数字必须在0--12之间
using namespace std;
int main()
{
int n;
cout < < "Input a number(0--12) " < <endl;
cin> > n;
while(n <0||n> 12)//输入范围的限制
{
cout < < "Scope srror, Input again: " < <endl;
cin> > n;
}
cout < < "result= " < <n+1 < <endl;
}
/*程序2,这个里的代码有一部分是我在其他地方看到的,基本是模仿的,如果输入
的不是int型,纠正错误,但是调试的时候,有几个问题:
如果开始就输入数字,要输入两次,才会输出结果,为什么呢?
但是如果开始就输入其他类型的符号,就提示错误,再输入数字,计算正确的结果*/
#include <iostream>
using namespace std;
int main()
{
int n;
cout < < "Input a number(0--12) " < <endl;
cin> > n;
while(!(cin> > n)) //输入的不是int型,纠正(这个while语句是我看其他地方模仿的)
{
cin.clear();//这里是什么意思呢,有什么作用?
cout < < "error,Input again: " < <endl;
while(cin.get()!= '\n ')//这里如何解释呢?
continue;
}
cout < < "result= " < <n+1 < <endl;
}
/*程序3。就是把前面两个合并起来,但是我第2 个都没做好,所以,这个更需要大家的帮助了,调试没有提示错误,但是无法实现我的功能:输入数字在0--12之间,并且不能输入其他类型*/
#include <iostream>
using namespace std;
int main()
{
int n;
cout < < "Input a number(0--12) " < <endl;
cin> > n;
while(n <0||n> 12)//输入范围的限制
{
cout < < "Scope srror, Input again: " < <endl;
cin> > n;
}
while(!(cin> > n))//输入的不是int型纠正
{
cin.clear();
cout < < "error,Input again: " < <endl;
while(cin.get()!= '\n ')
continue;
cout < < "result= " < <n+1 < <endl;
}
/*请大家帮我看看,谢谢*/
[解决办法]
这么晚了,当次好人,哈哈
程序2:
cin.clear();//这里是什么意思呢,有什么作用?
这个是清空输入流的状态,因为能进while(!(cin> > n))这里面,说明流状态位为错误的了,并且这个状态位一直不会变,直到你输入结束标志 。也就是说你的输入流就无法工作了,这时你不管输入什么东东,cin它都不会接收了,你可以试一下去掉它,看看什么结果。cin.clear()就是清除这个状态,让它继续工作
while(cin.get()!= '\n ')//这里如何解释呢?
这个是为了读空缓冲区,因为你上次的错误输入还在缓冲区中,如果不读出来下次的输入流操作将不会等待你输入直接还对老的缓冲区操作,而这个错误的数据又导致流状态为错误,又进入循环。。。
程序3
上面的清楚了,这个问题应该LZ自己可以解决了吧
[解决办法]
cin.clear();//这里是什么意思呢,有什么作用?
cout < < "error,Input again: " < <endl;
while(cin.get()!= '\n ')//这里如何解释呢?
当输入int数据类型不对的时候,
cin 被置错,
将不再接收任何输入。
cin.clear();//清除cin标志位,允许继续输入
...
while(cin.get()!= '\n ')//这里将输入中的所有字符都读取出来,因为输入错误时候这些输入不被接收都滞留在缓冲当中了,如果不读取出来,那么下一次还将被处理为 n 的输入值,继续出错...