,一个C++小程序出有关问题(陷入死循环了),求解释

求助,一个C++小程序出问题(陷入死循环了),求解释!
自己编的一个小程序来练习类的用法,
程序功能:根据选择来输出boy say:Hello,或Girl say :world。
问题:
输入0、1、2没问题,直接输入其它数字或字母也没问题,但先输入1,再输入2,最后输入字母时陷入死循环了,求解释。
(调试环境 visual studio 2012)

//主函数

#include<iostream>
#include"human.h"
#include"boy.h"
#include"girl.h"
using namespace std;

int main()
{
    human* p;
   int choice=0;
   while(choice<10)
   {  
   cout<<"请选择:"<<"0.Exet; 1.Boy say; 2.Girl say"<<endl;
   cin>>choice;
   bool quit=false;
   switch(choice)
   {    
   case 0: 
 quit=true;
 break;
   case 1:  
 p=new boy;
 p->say();
 delete p;
 break;
   case 2:
     p=new girl;
     p->say();
     delete p;
     break;
   default:
  cout<<"请选择0-2:"<<endl;
     break;  
   }
   
if(quit)
{
break;
}
   }
return 0;
}

//头文件human.h ,父类
#pragma once
class human
{
public:
human(void);
virtual void say(){}
virtual ~human(void);
};
//父类函数
#include "human.h"
#include<iostream>
using namespace std;

human::human(void)
{
cout<<"构造human"<<endl;
}
human::~human(void)
{
cout<<"析构human"<<endl;
}

//子类boy头文件

#include<iostream>
#include"human.h"
using namespace std;
#pragma once
class boy: public human
{
public:
boy(void);
virtual void say();
virtual ~boy(void);
};

//boy.h的函数,human的子类
#include "boy.h"

boy::boy(void)
{
cout<<"构造boy"<<endl;
}
void boy::say(void)
{
 cout<<"Boy says: Hello"<<endl;
}
boy::~boy()
{
cout<<"析构boy"<<endl;
}


//girl.h,human之类

#include<iostream>
#include"human.h"
using namespace std;
#pragma once
class girl: public human
{
public:
 girl(void);
virtual void say();
virtual ~girl(void);
};

//girl.h的函数
#include<iostream>
using namespace std;
#include "girl.h"

girl::girl(void)
{
cout<<"构造girl"<<endl;
}
 void girl::say(void)
{
cout<<"Girl says: World!"<<endl;
}

  girl:: ~girl(void)
{
cout<<"析构girl"<<endl;
}



,一个C++小程序出有关问题(陷入死循环了),求解释

------解决方案--------------------

//主函数

#include<iostream>
#include <limits>
using namespace std;
//头文件human.h ,父类
#pragma once
class human
{
public:
human(void);