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

Command Line Arguments error checking, see if whole argument is an integer

本文关键字:参数 是否 整数 错误 检查 命令行      更新时间:2023-10-16
int main(int argc, char *argv[])
{
  if(!isdigit(*argv[1]))
  {
    cerr << "Error msg" << endl;
    return 1;
  }
}

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

谢谢!

一种方法

是使用istringstream来检查是否可以转换为int

int val;
std::istringstream iss(argv[1]);
if(!(iss >> val)) {
    cerr << "Error msg" << endl;
    return 1;
}

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

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