C++ 尝试/抓住

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

我有一个简单的try-catch用于抛出cin异常,但它从不抛出异常

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除非您提供更多信息,否则很难判断问题所在。可能会问一个新问题