错误检查整数除以零

时间:2014-04-05 22:49:48

标签: c++ visual-c++ arguments

我正在C ++控制台编写基本转换程序,我正在使用argv [1]和argv [2] 输入号码&基

     #include "stdafx.h"
    #include <iostream>
 #include <cstdlib>
  #include <time.h>
 #include <math.h>
 #include <errno.h> 
 using namespace std;
const double MAXRANGE = pow(2.0,16.0); // 65536
 const double MINRANGE = -pow(2.0,16.0);

  int main(int argc, char *argv[])
{ 

int result;

if(atof (argv[1]) > 65536)
 { 
cout << "R" << endl;
return 0;
   }

   if(atof (argv[1]) < -65536)
    { 
 cout << "R" << end;
 return 0;
    }


    if(atof (argv[2]) > 65536 || (atof(argv[2]) < -65536))
   { 
cout << "R" << endl;
return 0;
     }


    int no,base,i;
   no=atoi(argv[1]);
   base=atoi(argv[2]);


      if (argc == 3 )
        {
   if(argv[2][0]=='b' && argv[2][1]=='2')
   {  
       cout<<"V"<<endl;

        return 0;
         }

       i= no % base;
        no=no/base;
        cout<<i;

                }

           return (0); 
             }

我收到错误

lab1.exe中0x012851BE处的未处理异常:0xC0000094:整数除零。

我理解这个错误即将发生,因为我已经使条件为零。但我不确定,确定的是我现在不知道如何进行错误检查。 我还尝试了另一个代码

            if(strcmp("b2",argv[2]==0 || strcmp("b3",argv[2]==0)

但它仍然会出现同样的错误。

那么,如何对argv [2]基数进行错误检查?用户必须输入argv [2],这是基础,我想检查argv [2]必须是'b1','b2','b3'等...到'b16'。

谢谢你!

1 个答案:

答案 0 :(得分:0)

您应该在相应的除法或throwm catch之前检查基数为零并处理零除法异常,即:

if (!base) {
    ...
    // or early return depending on your use case
} else {
   i = no % base;
   no=no/base;
}

或:

   try {
       ...
       if (!base)
           throw std::overflow_error("Divide by zero exception");
       i = no % base;
       no=no/base;
   } catch (std::overflow_error e) {
      ...
   }