【发布时间】:2014-04-05 22:49:47
【问题描述】:
我正在 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'。
谢谢!
【问题讨论】:
-
您要除以的是
base,而不是strcmp相等性检查中不相关的 0。 -
@chris 是的,我可以理解错误但我该如何进行错误检查!thx!
-
当
argv[2] == "b2"调用base=atoi(argv[2])之后,你希望base 是什么?提示,这不是传递给atoi的有效字符串。 -
是的!我有点明白我不能先做 int 然后再做字符串。有没有其他方法可以检查 argv[2]!谢谢@RetiredNinja
标签: c++ visual-c++ arguments