【发布时间】:2011-10-01 06:39:49
【问题描述】:
在以下程序中:
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”异常时进入无限循环。实际上,catch-block 中的“cin>>c”语句存在问题,但无法弄清楚为什么会这样。
【问题讨论】:
-
当我从“invalid_argument”的捕获块中删除整个输入场景并只放置“break”语句时,程序运行良好。
-
感谢 Kenny,我使用两个语句来清除 cin 流。 " std::cin.clear(); std::cin.ignore(80, '\n');"因为 "std::numeric_limits<:streamsize>::max()" 给出错误。程序现在运行良好