[原创][经典]如何处理非法字符输入
我们在做程序菜单时,设置供选择的ID(一般为整型数)却往往遇到用户输入非法字符(包括字符和一些组合键)的情况无法处理(比如:用户输入“Ctrl+z”,若不做处理就会进入死机状态,大家可以试着做一下),本人是在做数据结构的课程设计时发现这个问题的,经过一翻精心构思终于解决了这个问题,收获真的很大,这里拿出来共享,建议大家多讨论
或许大家有更高明的办法解决此问题,敬请指教!
[hide]
int input()//输入为非法字符返回 -1并退出(做菜单ID一般用正整数)
{
char str[256]={0};
int n=0;
do{
cin>>str;
if(strlen(str))//输入错误ID时返回重输入
{
n=atoi(str);
if(n<1||n>8)//这里做的菜单选项为1~8
out<<"输入ID错误,请重输入:"<<endl;
}
else
{
cout<<"非法字符!\n";
return -1;
}
}while(n<1&&n>8);
return n;
}
“Ctrl+z”是一个非常典型的非法字符例子,原因在于“cin>>str”确实有输入,但是cin不能得到输入结果,致使程序进入死循环(建议亲自试试)。为什么会这样呢?这里不便多说,大家也可以讨论讨论。
[/hide]