检查整数除以零时出错 我在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); }

检查整数除以零时出错 我在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); },c++,visual-c++,arguments,C++,Visual C++,Arguments,但它仍然出现了同样的错误 那么,如何对argv[2]基数进行错误检查呢?用户必须输入argv[2],它是基数,我想检查argv[2]必须是'b1','b2','b3'等等。。至“b16” 谢谢大家! 在相应的除法或throwm捕获之前,您应该检查基数与零,并处理零除法异常,即: if (!base) { ... // or early return depending on your use case } else { i = no % base; no=no/bas

但它仍然出现了同样的错误

那么,如何对argv[2]基数进行错误检查呢?用户必须输入argv[2],它是基数,我想检查argv[2]必须是'b1','b2','b3'等等。。至“b16”


谢谢大家!

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

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


您要除以的是
base
,而不是
strcmp
相等性检查中不相关的0。@chris是的,我能理解错误,但如何进行错误检查!谢谢!当调用
argv[2]==“b2”
时,在调用
base=atoi(argv[2])
之后,您希望base是什么?提示,这不是传递给
atoi
的有效字符串。是!我有点明白了,我不能再做int和string了。有没有其他方法来检查argv[2]!谢谢@RetiredInjai有点明白了,但正如你看到的,我的代码很简单。我只是一个初学者,您能告诉我如何使用if语句对argv[2]进行错误检查吗?thx!:)当零为基数时,为什么要检查argv[2]?您是否正在某个地方初始化base以在某个未发布的代码中使用argv[2]呢?是的!抱歉,用户必须在命令行中为base输入“b1”、“b2”等。所以我需要检查有效的输入'b1','b2',等等…@SbSangpi“…正如你所看到的…,不,实际上,我们没有看到。您的代码甚至无法编译。包括一个可运行的
main()
,以及在启动时提供给进程的确切命令行参数。对不起,我已经再次编辑了这个问题,感谢您指出!
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) {
      ...
   }