在 C 程序中使用 arg[v] 命令行参数

Using arg[v] command line arguments in a C program

我正在用 C 语言编写一个程序,它接受多个命令行参数。 argv[1] 将是单个字符 "option",'a' 或 'b' 或 'c',每个选项都会导致程序 运行 不同。我想用一个 if 语句开始我的程序的 main() 方法,该语句检查用户在命令行上指定的选项是否正确,即 'a' 或 'b' 或 'c',仅此而已。

我的代码:

int main (int argc, char *argv[])
{
    if (argv[1] != 'a' || 'b' || 'c') printf("Failure\n");
    else printf("Success\n");
}

当我编译这段代码时,我收到了这个警告:

warning: comparison between pointer and integer

我知道我误用了指向char数组的指针,但我不明白我是怎么回事。

表达式中

if (argv[1] != 'a' || 'b' || 'c')

argv[1] 的类型是 char*'a' 的类型是 char,编译器将其转换为 int。这解释了编译器警告消息。

该行不会按您希望的方式工作。你需要这样的东西:

if (argv[1][0] != 'a' &&
    argv[1][0] != 'b' &&
    argv[1][0] != 'c')
{
   printf("Failure\n");
}

为了使程序更健壮,在检查其内容之前需要先检查是否有参数。

int main (int argc, char *argv[])
{
   if ( argc > 1 )
   {
      if (argv[1][0] != 'a' &&
          argv[1][0] != 'b' &&
          argv[1][0] != 'c')
      {
         printf("Failure\n");
      }
      else
      {
         printf("Success\n");
      }
   }
   else
   {
      printf("Failure\n");
   }

   return 0;
}

有两个问题。首先,您将字符串(指向字符数组的指针)与字符进行比较。这就是您收到警告的原因。其次,您正在评估 'b''c' 作为布尔表达式。你实际上想要:

#include<stdio.h>
#include<string.h>
int main (int argc, char *argv[]) {
    if (  strcmp(argv[1], "a") != 0 // strcmp returns 0 on match.
       && strcmp(argv[1], "b") != 0
       && strcmp(argv[1], "c") != 0) {
        printf("Failure\n");
    } else {
        printf("Success\n");
    }
}

或者,

#include<stdio.h>
int main (int argc, char *argv[]) {
    // the first character is between a and c inclusive and the
    // second character is a null byte (the end of the string).
    if ('a' <= argv[1][0] && argv[1][0] <= 'c' && argv[1][1] == 0) {
        printf("Success\n");
    } else {
        printf("Failure\n");
    }
}

你可以试试这个

#include <usual.h>

int main (int argc, char *argv[])
{
    char in;
    in=*argv[1];

    if ( in == 'a' || in =='b' || in == 'c') printf("Success\n");
        else
        printf("Failure\n");

}