我正在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'。
谢谢你!答案 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) {
...
}