如何使用命令行参数嵌套Switch?

时间:2018-04-06 15:06:48

标签: c switch-statement case

我的主要功能中有我的开关案例和语句,如下所示:

int main(int argc, char *argv[])
{
  int c;
  while((c = getopt(argc,argv,"ABS"))!=-1)
    {
      switch(c)
      {
        case 'A':
         flag = 0;
         printf("open the port\n");
         struct can_frame frame_rd;
         open_port("vcan0");
         printf("vcan0 port is opened");
         fflush(stdout);
         create_file();
         while(1)
         {
           read_port(&frame_rd);
         }
         break;
       case 'B':
        flag = 1;
         printf("open the port\n");
         open_port("vcan0");
         printf("vcan0 port is opened");
         fflush(stdout);
         create_binfile();
         while(1)
         {
           read_port(&frame_rd);
         }
         break;
      }
}

现在我想在用户传递参数时使用嵌套开关-S case A我可以按如下方式进行操作吗?以下程序是否正确?

int main(int argc, char *argv[])
{
  int c;
  while((c = getopt(argc,argv,"ABS"))!=-1)
    {
      switch(c)
      {
        case 'A':

          switch(c)
           {
             case 'S':
               size = 100;
               break;
           }
         flag = 0;
         printf("open the port\n");
         struct can_frame frame_rd;
         open_port("vcan0");
         printf("vcan0 port is opened");
         fflush(stdout);
         create_file();
         while(1)
         {
           read_port(&frame_rd);
         }
         break;
       case 'B':
        flag = 1;
         printf("open the port\n");
         open_port("vcan0");
         printf("vcan0 port is opened");
         fflush(stdout);
         create_binfile();
         while(1)
         {
           read_port(&frame_rd);
         }
         break;
      }
}

在上面的代码中我可以对嵌套的情况使用相同的switch(c),嵌套开关的用法是否正确?提前感谢。

1 个答案:

答案 0 :(得分:1)

不,在外部swich情况'A'中,变量c可以被认为是常量,因此你的嵌套开关将找不到匹配的情况并且没有默认情况。

如果您知道您的参数是按特定顺序排列的,则可以直接解决它们,例如:第一个和第二个参数的argv [1]和argv [2]。