【问题标题】:how do I use enum and argv together?我如何一起使用 enum 和 argv?
【发布时间】:2021-02-22 00:38:45
【问题描述】:
enum cmd {hello, hi, bye};

int main(int argc, char *argv[]) {
    if(argc < 2)
        usage(usg);

    enum cmd command = argv[1];
    if(command == 0) {
        ...
    }
}

我收到此错误incompatible types when initializing type ‘enum cmd’ using type ‘char * 使用枚举有不同的方法吗?

【问题讨论】:

  • 请准确描述您要做什么,并提供输入示例。
  • 枚举基本上是整数。如果您尝试将 char* 分配给 int,您认为会发生什么?
  • @SuperStormer 我知道如何解决这个问题

标签: c enums


【解决方案1】:

您不能将字符串分配给类型为enum 的变量。 C 中的枚举是由integral constants 组成的类型。您要么需要work with the pre processor,要么创建一个自定义函数,通过比较argvenum cmd 设置为正确的值。这有效:

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

#define MAX_CMDS 3

typedef enum { hello , hi , bye}cmd;

cmd decide_command(char *arg)
{
    char *commands[] = { "hello", "hi" ,"bye" };

    for (int i = 0; i < MAX_CMDS; i++)
    {
        if (!strcmp(commands[i],arg)) /* comparing each of the commands with argv[1] */
        {
            return i; /* since hello == 0 in enum cmd, the correct value will set, if found */
        }
    }

    fprintf(stderr,"Unknown command %s",arg);

    exit(EXIT_FAILURE);
}

int main(int argc,char **argv)
{
    cmd command = 0;

    if (argc < 2)
    {
        /* error handling */
    }

    command = decide_command(argv[1]);

    /* code */

    exit(EXIT_SUCCESS);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多