В следующей программе:
int main(){
std::cout<<"enter numbers to be divide"<<std::endl;
int a,b,c;
while(true){
try{
if(!(std::cin>>a>>b)){
throw std::invalid_argument("please enter proper interger");
}
if(b==0){
throw std::runtime_error("please enter enter nonzero divisor");
}
c=a/b;
std::cout<<"quotient = "<<c<<std::endl;
}
catch(std::invalid_argument e){
std::cout<<e.what()<<"\ntry again?enter y/n";
char c;
std::cin>>c;
if(c=='n'||c=='N') break;
}
catch(std::runtime_error e){
std::cout<<e.what()<<"\ntry again?enter y/n";
char c;
std::cin>>c;
if(c=='n'||c=='N') break;
}
}
return 0;
}
Я использую два вида исключений. Программа отлично работает, когда выдает исключение «runtime_error», но входит в бесконечный цикл при обнаружении исключения «invalid_argument».На самом деле есть проблема в операторе "cin>>c
" в catch-блоке, но не могу понять, почему это происходит.