c/c++开发分享如何检查argv 是否为整数

我正在尝试用C ++创建一个命令行应用程序,我想确保在某个命令参数之后输入是一个整数。

对于此示例,我想检查下一个参数是否是“-p”命令参数后面的整数。 这是我现在代码的片段。

while (count < argc){ if (strcmp("-p", argv[count]) == 0){ has_p = true; //Boolean pid = atoi(argv[count + 1]); if (pid == 0 && argv[count + 1] != "0" ){ err = 1; cout << "pid argument is not a valid input" << endl; pid = -1; } count++; } ... } 

现在,此代码正确捕获此输入中的错误:

但是输入格式失败了

我试图通过使用sprintf来比较它来解决这个问题。 不幸的是,使用char数组指针提供sprintf只会在buffer2中输出1个字符。

 while (count < argc){ if (strcmp("-p", argv[count]) == 0){ has_p = true; //Boolean pid = atoi(argv[count + 1]); sprintf(buffer, "%d", pid); sprintf(buffer2, "%d", *argv[count + 1]); if (pid == 0 && argv[count + 1] != "0" || (buffer != buffer2) ){ err = 1; cout << "pid argument is not a valid input" << endl; pid = -1; } count++; } ... } 

有没有办法让sprintf读取整个char数组? 如果没有,除了循环指针直到我点击“ 0”之外,是否有更好的解决方案

    atoi()无法做你想做的事。 您需要使用strtol()来实现此目的。 它有很多改进的错误检查能力。

    签名:

     long int strtol(const char *nptr, char **endptr, int base); 

    此函数将转换后的整数作为long int值返回,否则返回零值。 转换后,您可以检查endptr的内容并做出决定。

    以下是一个方便的单行…

     sscanf(argv[count + 1], "%d%*c", &n) == 1 

    …如果可以读入int n并且之后没有尾随字符,那么将评估为true。 %*c的’*’禁止赋值,因此不需要将指针传递给虚拟char变量。 请在此处查看scanf文档 。

    在C中,您可以简单地浏览char *并检查是否只有数字。

     char c = '0'; int i = 0; int err = 0 while ( c != ''){ if (arg[i] < 47 || arg[i] > 57){ err = 1; break; } 

    您还可以使用以strtol(参见stol )实现的c ++ 11替代方法。

      以上就是c/c++开发分享如何检查argv 是否为整数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545949.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注