使用带有argv参数的条件

时间:2014-07-30 18:47:54

标签: c arguments argv conditional

我试图在argv中使用参数并在其中使用条件,例如

程序的输入将是这样的

./ program -t -d -m

我想做这样的事情      if == -t然后在变量中保存数字的值      if == -d然后在变量中保存字符串的值

我想这样做是因为程序的输入可以是这样的

   ./program -d <string> -m <char> -t <number>
   ./program -m <char> -d <string>  -t <number>

我该怎么做?我试图使用getopt,但我不理解它

1 个答案:

答案 0 :(得分:2)

如上所述,如何处理一些简短选项的问题始终是快速strcmpgetopt使用之间的平衡。对于一些选项,strcmp没有任何问题。以下是使用strcmp使用您的选项的简单示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[])
{
    if (argc < 7) {
        fprintf (stderr, "Error, insufficient input.\n  Usage: %s -d <string> -m <char> -t <int>\n", argv[0]);
        return 1;
    }

    int it;
    char *str = NULL;
    char chr;
    int  num;

    for (it = 1; it < argc; it++) {
        if (strcmp ("-d", argv[it]) == 0 && it < (argc - 1))
            str = strdup (argv[it+1]);
        if (strcmp ("-m", argv[it]) == 0 && it < (argc - 1))
            chr = *argv[it+1];
        if (strcmp ("-t", argv[it]) == 0 && it < (argc - 1))
            num = atoi (argv[it+1]);
    }

    printf ("\nOptions entered:\n\n");
    printf ("  str: %s\n  chr: %c\n  num: %d\n\n", str, chr, num);

    return 0;
}

<强>编译:

gcc -Wall -Wextra -o bin/opts opts.c

生成

$ ./bin/opts -d "this is my string" -m c -t 2048

<强>输出:

Options entered:

  str: this is my string
  chr: c
  num: 2048