argv [1]与C编程中的字符串之间的比较[关闭]

问题描述 投票:0回答:1

我编写了一些代码,尝试将argv [1]与字符串"o"和字符串"m"进行比较,如果在argv []中找不到它,则会显示错误。问题是该程序无法按预期运行。这是我所做的:

int main(int argc, char *argv[])
{
  if((strcmp(argv[1], "o") != 0) || (strcmp(argv[1], "m") != 0))
  {
    printf("error\n");
  }
    return 0;
}
c
1个回答
3
投票

您的支票

if((strcmp(argv[1], "o") != 0) || (strcmp(argv[1], "m") != 0))
{
    printf("error\n");
}

可以翻译为

[如果程序的第一个参数不等于'o',则引发错误AND同时不等于'm'

(实际上,当比较的字符串相等时,strcmp ()返回0)

避免错误的唯一可能方法是使参数等于'o'和'm'同时。这显然是不可能的。

您有两个选择。首先,您可以执行positive check

if((strcmp(argv[1], "o") == 0) || (strcmp(argv[1], "m") == 0))
{
    ...
}
else
{
    printf("error\n");
}

或否定支票(例如您的支票)。在这种情况下,您需要参数不是'o'并且不是'm'(逻辑运算符&&):

if((strcmp(argv[1], "o") != 0) && (strcmp(argv[1], "m") != 0))
{
    printf("error\n");
}
© www.soinside.com 2019 - 2024. All rights reserved.