这主要是Streams状态的问题。Streams定义了一些型别为iostate的常数,用以反映stream的状态:
    goodbit :一切都好;没有其他任何状态为被设立;
    eofbit  :遇到end-of-file;
    failbit :错误;某个I/O操作未成功(通常是由于读入格式错误,例如程序想读入一个整数,却遇到一个字符);
    badbit  :毁灭性错误;
 
C语言可以在“格式错误”发生之后仍然读入字符。但C++不同:如果设置了failbit,除非显示予以清除,否则无法进行下一个操作。
 
具体请参考《C++标准程序库》p597, Streams的状态一节。
 

int  main()
{
   
    
int  a  =   - 1 ;
    
char  b  =   - 1 ;
    
do
 
{
 cout 
<<   " please input the a and b " ;
 cin 
>>  a; 
 
if  (cin.fail())
 
{
  cin.clear();
  cin.rdbuf()
-> pubseekpos(cin.rdbuf() -> in_avail());
 }

 cin 
>>  b;
 
if  (cin.fail())
 
{
  cin.clear();
  cin.rdbuf()
-> pubseekpos(cin.rdbuf() -> in_avail());
 }

 }
  while (a  <   0   ||  b  <   0 );
    
  
return   0 ;
}