命令行参数错误检查,查看整个参数是否为整数

时间:2015-11-08 19:02:55

标签: c++ command-line-arguments

int main(int argc, char *argv[])
{
  if(!isdigit(*argv[1]))
  {
    cerr << "Error msg" << endl;
    return 1;
  }
}

嘿伙计们,对于我的程序的一部分,我必须检查第一个参数(argv [1])是否是整数。如果给定的参数不是整数,它会输出错误消息并退出程序,否则它会继续执行。当参数是常规字符串(例如dzd或xy)时,我已经让我的程序正确地找到错误,但是当给定的参数以数字开头时,例如1dzd或32st,它无法找到错误。我想知道你们中是否有人可以帮我弄清楚如何更改或添加给定代码以使其能够正确地找到1dzd或32st等参数的错误?

谢谢!

2 个答案:

答案 0 :(得分:0)

一种方法是使用istringstream检查是否可以转换为int

int val;
std::istringstream iss(argv[1]);

if(!(iss >> val)) {
    cerr << "Error msg" << endl;
    return 1;
}

答案 1 :(得分:0)

您只检查第一个字符是否为数字。以下代码将检查整个参数是否为数字。那或者你可以只使用标准函数strtol。

char *ch = argv[1];

while(*(ch++) != 0) {
    if(!isdigit(*argv[1]))
    {
        cerr << "Error msg" << endl;
        return 1;
    }
}