C++中怎样在输入流中区别int类型和字符类型?(进一步的问题,有补充浮点数的情况)

原来的问题修改不了标题,无奈重新发一遍。
在实际测试中,使用@whistler 君及@精英王子 君的方法时,的确可以识别字符类型(如a,+等),但若输入浮点数类型(如1.2)仍然会跳出循环进入下一步。而我希望的是除了某几个特定整数(如1,2,3)外其他所有的非法输入都能给出报错结果并且不影响重复输入,如果能对不同的错误(字符,非要求整数,浮点数)提示不同的信息则更佳。请问诸位如何解决浮点数输入时跳出报错循环的情况?另外既然跳出了循环那x的值是几呢(经测试,输入1.2,值为1)?算是强制类型转换吗?
-----------------------原问题---------------------------------------------------------------------
有一个位置我需要输入整数,int x;cin>>x,若故意输入一个字符,则此处会无限循环。请问如何在输入为字符时(如a)将其分辨出来以给出错误信息呢?多谢诸位高手。

原问题连接http://www.guokr.com/question/237697/

推荐  (0) | 1人关注关注
6个答案
1 0

Clones信息安全专业,物理爱好者

2012-06-20 12:32
支持者: 随鸟走天涯

考虑自动机编程

定义好自动机, 整数、字符串、浮点数、运算符都是可以区别出来的

1 0

_be5invisnodejs + bioinorganic

2012-06-20 14:28
支持者: Clones

这就是需要 Lexer 的场合了,请自行 G 娘 lex/yacc

0 0

Lyn酱自动化系本科生

2012-06-20 02:21

其实我觉得Kyle君的方法比较适合,输入到buffer里面自己判断。
int x;cin>>x;的话遇到“.”应该是会做作为分隔符的,即只把前面的1输进去,可以自己实验一下。

0 0

whistler软件工程学生、Python爱好者

2012-06-20 04:18

呃。。。1.2浮点数之类的我帮不了你。。。因为这是系统自动将缓冲转为int的,其他的话很简单

0 0

就是先加一个判断花束不就结了?c库里是有的啊,isdigit。。。还有isalg什么的自己查

0 0

我个人倾向于用getline读入,再对读取的字符串进行分类。
另,由于使用的是C++,我更倾向于使用类的概念,这样封装性好点。
好长时间不写代码了- -!!

...竟然有非法字符..

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字第朝200003号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区