c - 如何让 C 程序接受一次选项

标签 c command-line-interface

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

int main(int argc, char *argv[])
{
if (argc == 1)
{
    printf("You must supply -m, -f, or -l\n");
    return 1;
}

for (int i = 1; i < argc; i++)
{
    if (strcmp(argv[i], "-l") == 0)
    {
        printf("Salve\n");
    }
    else if (strcmp(argv[i], "-f") == 0)
    {
        printf("Bonjour\n");
    }
    else if (strcmp(argv[i], "-m") == 0)
    {
        printf("Howdy\n");
    }
    else if (strcmp(argv[i], "-d") == 0)
    {
        printf("Derp\n");
    }
    else
    {
        printf("Use -m, -f, or -l\n");
        return 1;
    }
}

return 0;

所以当你执行 ./greet -m -m -d 时,我想这样做,它会打印一次 howdy 和一次 derp,忽略第二个 -m 选项。我怎么能做那样的事情?

最佳答案

在命令行中处理一个标志时,不是立即采取行动,而是设置一个它被看到的代码标志(初始化为 FALSE)。或者增加一个计数器,如果你想标记标志的过度使用。您可以即时处理冲突的标志(-a 和 -b 是互斥的,并且在处理 -b 时,您的 a-flag 表示您已经给出了 -a)。处理命令行后,您可以遍历标志并执行操作。标志的顺序重要吗?

关于c - 如何让 C 程序接受一次选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695056/

相关文章:

c - 二维数组的段错误

linux - curl:来自 CLI 的每个文件附加 header (用于多部分 POST、SOAP 等)

linux - 如何从curl响应中获取某些JSON值

c - 在最后一个节点上释放链表会崩溃

c - 为什么 func() 和 func(void) 不同

c++ - 如果不更改全局信号处理程序,是否可以强制 OpenSSL 不生成 SIGPIPE?

c 指向指针的指针,或将列表传递给函数

java - MariaDB和flyway语法错误但在JAVA中没有

JavaScript 到 HTML

sql - 从 beeline(cli) 将表导出到 csv