C++四则运算

[复制链接]
查看11 | 回复2 | 2010-1-15 20:02:54 | 显示全部楼层 |阅读模式
进入死循环是因为你输入的数据不是预设的类型,比如你的cin>>a;但是你的a变量预设的是float类型,但是如果你不输入float类型的数据,那么就会导致输入流关闭,所以就不能再输入数据,而由于输入的数据类型不对,所以它也不会被a接收而仍存在于输入缓冲里,这样就导致了死循环,LZ要做的就是在输入错误类型的情况下,消除cin的错误标志,然后清空输入缓冲,即可。。。。具体去看看关于I/O流操作的资料就明白了
回复

使用道具 举报

千问 | 2010-1-15 20:02:54 | 显示全部楼层
在cin>>时如果我们输入一个字符就会导致刷屏的结果这是因为非数字字符无法被cin接收而一直停留在缓冲区,导致下一次cin时直接从缓存读数但字符无法读取结果导致无限循环这被很多人认为成库的bug 解决方法: 1> 在cin>>后加cin.ignore(); cin.clear(); cin.ignore()方法cin.ignore( 5, 'c' ) 的是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到5或者被抛弃的字符是'c',则cin.ignore() 函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore( 1024, '\n' );,通常把第一个参数设置得足够大,这样实际上总是只有第二个参数 '\n' 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。 cin.clear用法如果输入发生错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。 2> 在cin>>后加fflush(stdin);(需要stdio.h) fflush(stdin)刷新标准输入缓冲区参考资料:http://blog.sina.com.cn/s/blog_5d49f60c0100bt18.html

已赞过已踩过<
回复

使用道具 举报

千问 | 2010-1-15 20:02:54 | 显示全部楼层
你都定义成浮点型数据了,为什么还要输入字符型数据呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行