C++程序陷入死循环,如何避免?

要求输入一个int,但输入字符或字母程序就陷入死循环代码如下,求教!#include<iostream>usingstd::cout;usingstd::endl;cla... 要求输入一个int,但输入字符或字母程序就陷入死循环
代码如下,求教!
#include <iostream>
using std::cout;
using std::endl;

class Dog
{
public:
void Speak()const { cout << "Woof!" << endl; }
void Move() const { cout << "Walking to heel..." << endl; }
void Eat() const { cout << "Gobbling food..." << endl; }
void Growl() const { cout << "Grrrrr" << endl; }
void Whimper() const { cout << "Whining noises..." << endl; }
void RollOver() const { cout << "Rolling over..." << endl; }
void PlayDead() const
{ cout << "The end of Little Caesar?" << endl; }
};

typedef void (Dog::*PDF)()const ;
int main()
{
const int MaxFuncs = 7;
PDF DogFunctions[MaxFuncs] =
{Dog::Speak,
Dog::Move,
Dog::Eat,
Dog::Growl,
Dog::Whimper,
Dog::RollOver,
Dog::PlayDead };

Dog* pDog =0;
int Method;
bool fQuit = false;

while (!fQuit)
{
cout << "(0)Quit (1)Speak (2)Move (3)Eat (4)Growl";
cout << " (5)Whimper (6)Roll Over (7)Play Dead: ";
std::cin >> Method;
if (Method < 0 || Method >= 8)
{
cout<<"输入错误!请重新输入:\n";
continue;
}
if(Method==0)
{
fQuit=true;
}
else
{
pDog = new Dog;
(pDog->*DogFunctions[Method-1])();
delete pDog;
}
}
return 0;
}
展开
 我来答
mmxxll211
2011-09-02 · TA获得超过481个赞
知道小有建树答主
回答量:398
采纳率:0%
帮助的人:273万
展开全部
防错处理是编程非常重要的工作.
因此,你在程序设计的时候,就需要考虑所有可能的输入情况.
把不期望的输入过滤出来不做处理,或做错误处理.只对期望的输入做处理.

如果你在程序设计之初没有考虑对输入做检查的话,程序就会非你所愿的执行,这就是危害.没有什么比程序没有如程序员想象的那样去执行危害更大了.

以你的这个例子来说的话,你获取到输入后,就要判断输入的是什么,如果用户输入的是数字,那你就正常处理,如果用户输入的是其他你不希望的值,那你可以打印一个提示,说,请输入整数.然后程序返回.等等.

自己多考虑考虑.
匿名用户
2011-09-02
展开全部
这是由cin>>Method ;这个语句决定的
由于定义了Method 是int类型,如果遇到cin不是int类型或者越界,则会出现异常,不会赋值给Method ,使其保持原值。字符无法被cin接收而一直停留在缓冲区,导致下一次cin时直接从缓存读数,但字符无法读取结果导致无限循环。
可以在continue;前面增加清除输入缓冲区的函数,如下:
cin.clear();
cin.ignore();
continue;
追问
按你说的添加清除函数之后,输入字母能运行,输入字符就陷入死循环了。该怎么解决啊?
追答
在continue;前面再增加cin.sync();
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
741852963一
2011-09-02 · TA获得超过268个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:213万
展开全部
可以在输入之后判断一下是数字还是字母(或字符),如果是非数字,跳转到输入部分的语句块,重复输入一次。思想告诉你,代码自己写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tostiter
2011-09-02 · 超过17用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:56.3万
展开全部
如果是这个样子话,你可能比较复杂了,获得一行字符string中,然后解析输入的数据是int还是其它类型的
追问
我是想让程序更加健壮些。
不明白的是输入类型错误后,程序会如何?有什么危害?
希望详细点
追答
可能需要多了解一下iostream库了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式