C++ 尝试/抓住
我有一个简单的try-catch用于抛出cin异常,但它从不抛出异常C++ 尝试/抓住,c++,exception-handling,C++,Exception Handling,我有一个简单的try-catch用于抛出cin异常,但它从不抛出异常 while(cin>>num) { try { if(cin.fail()) { throw "error"; } if(num>0) { cout << "number greater than 0" << endl; } } catch(char* error) { co
while(cin>>num) {
try {
if(cin.fail()) {
throw "error";
}
if(num>0) {
cout << "number greater than 0" << endl;
}
}
catch(char* error) {
cout << error << endl;
}
}
while(cin>>num){
试一试{
if(cin.fail()){
抛出“错误”;
}
如果(数值>0){
cout字符串文本,如“error”,不匹配char*
,它必须是const char*
字符串文本,如“error”,不匹配char*
,它必须是const char*
cin>>num return false,这样你的循环体就不会被执行
如果您真的需要使用execption
while(true)
{
cin >> num;
try{
if(cin.fail()){
throw "error";
}
if(num>0){
cout<<"number greater than 0"<<endl;
}
}
catch( char* error){
cout<<error<<endl;
break;
}
}
while(true)
{
cin>>num;
试一试{
if(cin.fail()){
抛出“错误”;
}
如果(数值>0){
coutcin>>num返回false,因此根本不会执行循环体
如果您真的需要使用execption
while(true)
{
cin >> num;
try{
if(cin.fail()){
throw "error";
}
if(num>0){
cout<<"number greater than 0"<<endl;
}
}
catch( char* error){
cout<<error<<endl;
break;
}
}
while(true)
{
cin>>num;
试一试{
if(cin.fail()){
抛出“错误”;
}
如果(数值>0){
cout这可能是无关的,但你应该将错误打印到cerr
,而不是cout
。哦,顺便说一句。请不要抛出不是从std::exception派生的东西。这可能是无关的,但你应该将错误打印到cerr
,而不是cout
。哦,顺便说一下。不要抛出不是从s派生的东西td::例外。这不会在编译过程中引发错误?或者可能只是一个警告,而询问者没有安装-Wall
。@Andrew:我不知道为什么会出现错误。他没有试图调用函数,这只是一个未捕获的异常。是的,我想我只是认为未捕获的异常至少应该是一个警告,因为像这样的类型不匹配。那么,如果我把它设为const char*,当用户尝试输入非整数值时,它会捕获cin失败吗?@user1035927:它会捕获这个特殊的异常,但正如Phil指出的,如果输入错误,循环体根本不会执行。这在编译期间不会抛出错误?或者可能只是一个警告d询问者没有打开-Wall
?@Andrew:我不知道为什么会出错。他没有试图调用函数,这只是一个未捕获的异常。是的,我想我只是认为一个未捕获的异常至少应该是一个警告,因为像这样的类型不匹配。所以,如果我将它作为const char*使用时它会捕获cin失败吗r试图输入非整数值?@user1035927:它会捕获这个特殊的异常,但正如Phil指出的,如果输入错误,循环体根本不会执行。那么,我如何捕获非整数值用户输入异常呢?捕获得好,我甚至没有注意到。谢谢你的帮助Phil。我现在还有一个问题,我是taki通过重定向的文本文件(如:checknumber)处理用户输入除非您提供更多信息,否则很难判断问题所在。可能会问一个新问题那么,我如何才能捕获非整数用户输入异常?很好,我甚至没有注意到。谢谢您的帮助Phil。我还有一个问题现在,我通过重定向文本文件获取用户输入,如:checknumber除非您提供更多信息,否则很难判断问题所在。可能会问一个新问题