| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5267 人关注过本帖
标题:[原创][经典]如何处理非法字符输入
取消只看楼主 加入收藏
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
收藏
 问题点数:0 回复次数:1 
[原创][经典]如何处理非法字符输入
我们在做程序菜单时,设置供选择的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]
搜索更多相关主题的帖子: 字符 经典 输入 
2005-10-05 00:42
苦味酸
Rank: 2
等 级:新手上路
威 望:3
帖 子:142
专家分:0
注 册:2005-9-9
收藏
得分:0 
[请教楼主,当我输入字符串时,下面语句转换不了,n 的值仍然是0;
n=atoi(str);
还有,以Ctrl + z作为输入时,我没有了生死机状态,请问是怎么回事?你说的死机状态是怎样的?谢谢!]


不好意思,这几天太忙,没上网,所以现在才回复你的问题

如果清楚atoi()函数的功能,这个问题就很好解决了。
atoi()函数在头文件stdlib.h中包含,它的功能是将字符串转换为整型数,如果str是包含有字符(这里指狭义的字符)的串时返回为0,如果是只包含整型数的串时返回即为实际的整型值。

不明白你说的“没有了生死机状态”指什么,可能是你没理解我说的意思,在这里再说说吧。
    输入为“ctrl+z”时,确实是输入了,并且cin也认为有输入,关键是cin操作并不能得到你所输入的“ctrl+z”这个字符串,以至于程序总是在这里检测已输入的字符串,但又总是得不到,所以就造成死机了。打个比方,你看到在一个直角盒子的角上有一颗针,一心要把它拣起来,但是又总是抓不到(因为在角上),所以就一直在那里拣。

本人不才,只能说到这个份上了,如果有什么不对的地方还望指教。

大家多交流交流是有好处的,时间紧,请留言吧!


『站在风口浪尖紧握住鼠标旋转!』 『不在于选择什么,而在于坚持多久!』
2005-10-13 18:36
快速回复:[原创][经典]如何处理非法字符输入
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012115 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved