检查参数是否为双

时间:2017-12-09 00:36:03

标签: c

我正在开发一个程序,我需要检查argv传递的一个char数组是否是数字,当我有2_two或2-2这样的参数时出现问题,我尝试的是什么不起作用导致catch数字2并在程序退出时保持程序运行。 我尝试过atrof(),sprintf(),但没有工作。

double from;
double to;
double jump;
switch (argc){
    case 2: to = atof(argv [1]); from =10; jump =1; break;
    case 3: to = atof(argv [1]); from = atof(argv[2]); jump = 1; break;
    case 4: to = atof(argv [1]); from = atof(argv[2]); jump =atof(argv [3]); break;
    default: from=1; to = 10; jump =1;
}
if (from == 0.0){
    char message []= "The parameter \"from\" is not a valid number";
    Error(EX_USAGE,message);
}else if (to==0.0){
    char message []= "The parameter \"to\" is not a valid number";
    Error(EX_USAGE,message);
}else if (jump==0.0){
    char message []= "The parameter \"jump\" is not a valid number";
    Error(EX_USAGE,message);
}

方法Error是一种辅助方法,它使用代码错误和消息

退出程序

所以当我得到一个不仅仅是数字的参数时,我需要的是程序退出。

1 个答案:

答案 0 :(得分:0)

使用strtod(包括<stdlib.h>

double strtod(const char *nptr, char **endptr);

来自man

  

如果endptr不是NULL,则指向最后一个字符后面的字符的指针          转换存储在endptr。

引用的位置

使用示例

char *endptr;

double d = strtod(argv[1], &endptr);

int ok = endptr == argv[1] + strlen(argv[1]);

如果endptr指向\0中的尾随argv[1],则表示整个字符串已转换。

ok1,表示转换已在argv[1]结束时完成。

if (ok) {
    // use `d`, the converted number
}