C切换问题

时间:2011-05-24 02:52:57

标签: c switch-statement

我是编程新手,我想添加一个可以接受选项案例的开关,例如-aa-aaa-aaaaaa等这三种案例中的每一种除了案例a

之外,还可以提供单一函数

我在想......

    int option = getopt (argc, argv, "abcd");
    switch(option){
    case 'a': BLAH = TRUE;
              break;
    case 'b': FOO = TRUE;
              break;
    case 'c': BAR = TRUE;
              break;
    case 'd': BAZ = TRUE;
              break;
    }
    for(int i = 1; i<argc; i++){
    if ( argv[i][0] == '-' && argv[i][1] == 'a' && argv[i][i+2] == 'a' )
       myOption =TRUE;
    }

但是这会有效吗? 谢谢你的阅读。

3 个答案:

答案 0 :(得分:3)

getopt_long(3)函数为许多程序提供命令行解析,通常使用如下调用:

struct option long_options[] = {
    {"add",         0, 0, 'a'},
    {"binary",      0, 0, 'B'},
    {"base",        1, 0, 'b'},
...
    {"Optimize",        1, 0, 'O'},
    {"preprocess",      0, 0, 'p'},
    {NULL, 0, 0, 0},
};


while ((c = getopt_long(argc, argv, "adf:h::rRVvI:b:BCD:NSm:qQn:XKTWkO:po:", long_options, &o)) != -1)
{
    switch (c) {
    case 0:
        PERROR("Assert, in getopt_long handling\n");
        display_usage(progname);
        exit(0);
        break;
    case 'a':
        count++;
        option = OPTION_ADD;
        break;
    case 'd':
        debug++;
        skip_read_cache = 1;
        break;
/* ... and so forth */

您可以使用getopt_long(3)扫描输入数组,以查找来自add的多个输入(请binarylong_options[]等)映射到一个简短选项(aB)。

但如果你对你想要完成的事情更具体,那么可能会有更好的机制。

答案 1 :(得分:3)

不,这可能不起作用。 C中的最佳方法(假设您使用Linux)是使用GNU C库提供的一些getopt函数。如果您只需要处理一个或两个长选项,也可以使用if..else ifstrcmp()

上次我检查了BSD的libc也存在相似的功能(虽然可能有点不同)。

答案 2 :(得分:1)

'aaa'不是整数,不是char,而不是C语言中的任何类型。传递给switch语句的表达式应该返回一个整数。所以,switch语句会在那里抱怨。

对于非整数比较,例如您列出的比较,使用if-else应该是好的。