首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查命令行参数中是否有任何字符在C中不是“1”或“0”

检查命令行参数中是否有任何字符在C中不是“1”或“0”
EN

Stack Overflow用户
提问于 2015-10-12 02:49:31
回答 1查看 109关注 0票数 0

我正在编写的程序的一部分期望命令行参数中有一个二进制数,并将其值作为十进制数返回。程序的一部分检查以确保命令行参数是一个实际的二进制数字(意味着它不包含数字2-9)。这似乎相对容易实现,但由于某些原因,这是行不通的:

代码语言:javascript
复制
int i;
for (i = 0; i < strlen(argv[3] - 1); i++)
{
  if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '\0')
  {
    printf("arg[3][%d]: %c\n", i, argv[3][i]);
    printf("ERROR: argument 3 is not a binary integer\n%);
    return 0;
  }
}

(argv3是二进制值应该去的参数)。

即使我只是给它一个"0001“的论点,它也会返回:

"arg3: 0

错误:参数3不是二进制整数“

其余的代码工作正常,所以我知道这是显而易见的事情,我看不到if语句中的逻辑。有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 02:56:49

这句话:

代码语言:javascript
复制
if (argv[3][i] != '0' || argv[3][i] != '1' || argv[3][i] != '\0')

将永远坚定地为真。您应该对OR使用&&,而不是||

此外,您在strlen(argv[3]-1);中有一个bug。我猜您实际上是指strlen(argv[3])-1;,因为第一个将指向内存中的一个错误位置。但是,您也不想要第二个角色,因为这将错过最后一个角色。

以下是为工作而修改的代码:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main( int argc, char** argv )
{
    int i;
    for (i = 0; i < strlen(argv[3]); i++)
    {
        if (argv[3][i] != '0' && argv[3][i] != '1' && argv[3][i] != '\0')
        {
            printf("arg[3][%d]: %c\n", i, argv[3][i]);
            printf("ERROR: argument 3 is not a binary integer\n");
            return 0;
        }
    }

    return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33072537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档