我可以在 C 中的 Switch Case 中的另一个案例中使用一个案例吗

标签 c switch-statement gtk keyevent

在这里,我在 Switch Case 中使用了一些关键事件。

当我按下 0 时,它会转到 Case 0: 并通过关闭第二个窗口 (Window2) 返回到我的 MainWindow。 如果我按 1 它会分别指向 Case 1 等等,这些操作将分别执行。

我的关键事件:

    g_printerr("%s\n", gdk_keyval_name (event->keyval));
    keypressed=gdk_keyval_name (event->keyval);
    printf("The KeyEvent is: %s\n", keypressed);     
    char ch[10];
    sprintf(ch, "%s\n", keypressed);   
    printf("The NewKeyEvent is: %s\n", ch);
    int holdch=atoi(ch);

开关盒:

switch(holdch)
         {
              case 0:
                   printf("Close Window2")
              break;   
              case 1:
                   printf("Open Quadrant1");
              break;
              case 2:
                   printf("Open Quadrant2");
              break;
              case 3:
                   printf("Open Quadrant3");
              break;
              case 4:
                   printf("Open Quadrant4");
              break;
           }        

现在,我想在运行时关闭从Case(1-4) 运行的操作,然后从它之前离开的地方返回到第二个窗口。

如何做到这一点? Case(1-4) 中是否可以使用其他 Cases?这次我想为此使用 Escq 之类的按键。可能吗?

注意:

案例 0-> 关闭我现在所在的窗口,此后就没有机会执行其他案例了。第二个窗口是包含 4 个象限的窗口。

Case(1-4)-> 全部可执行,但一次只能执行一个。

最佳答案

在 case 中可以有另一个 switch 语句(嵌套的 switch case 语句)。示例:

switch(keyevent) {
case 0:
    printf("Close Window2")
    break;   
case 1:
   printf("Open Quadrant1");
   switch(foo) {
   case 1:
       // ...
   }
   break;
   // ...
}

但是,如果我正确理解您的用例,我认为您不需要它。 这样的事情怎么样:

switch(keyevent) {
case 0:
    printf("Close Window2")
    break;   
case 1:
    q1_is_open = true;
    printf("Open Quadrant1");
    break;
case 2:
    q2_is_open = true;
    printf("Open Quadrant2");
    break;
case 3:
    q3_is_open = true;
    printf("Open Quadrant3");
    break;
case 4:
    q4_is_open = true;
    printf("Open Quadrant4");
    break;
case Q_BUTTON_PRESSED:
    if (q1_is_open) {
        printf("Close Quadrant1");
        q1_is_open = false;
    }
    if (q2_is_open) {
        printf("Close Quadrant2");
        q2_is_open = false;
    }
    if (q3_is_open) {
        printf("Close Quadrant3");
        q3_is_open = false;
    }
    if (q4_is_open) {
        printf("Close Quadrant4");
        q4_is_open = false;
    }
    break;
} 

关于我可以在 C 中的 Switch Case 中的另一个案例中使用一个案例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32602443/

相关文章:

c - 在C中查找机器的IP地址?

gtk - Libtool 认为是 "library was moved"但事实并非如此

python - pygtk自定义小部件显示在单独的窗口中

python - 捕获使剩余模式无法访问

c - 在 GTK+ 中将标签设为粗体

c - 内存分配的段错误

c - 将数组从文件 1 中的方法传递到文件 2 中的方法,而不在方法中使用额外参数

C - 找到一个单词并获取接下来的两个单词

C++:根据变量将同一对象实例化为多种类型之一

Swift:切换 View 后使用 UILongPressGestureRecognizer 时应用程序崩溃