【问题标题】:Arduino : A case of switch block the case that are afterArduino : 一个 switch 的 case 挡住了后面的 case
【发布时间】:2020-05-19 09:29:18
【问题描述】:

我有一个开关和一个功能,在开关的第 4 种情况下“阻止它之后的情况”。

我试图移动箱子,显然是“P_JEU”箱子挡住了,但我不明白为什么。

switch (partie) {

    case P_CHOIX_ANIM:
      allPlayers.chenillard(250,100);
      partie = P_CHOIX;

    case P_CHOIX:
      temp = allPlayers.checkInterro();
      if (temp == 0) break;
      if (temp == 1) { //Only 1 press
          partie = P_JEU;
          DEBUG_PRINTLN("P_CHOIX 1 press");
          break;
      }
      partie = P_CHOIX_ERREUR;
      break;

    case P_JEU:
      // Bug
      if (bConfig.isPressed()) {
        if (bConfig.getPressDuration()) {
          if (bConfig.getPressDuration() <= 2000) {
            partie = P_CHOIX_RESET;
          } else {
            bConfig.reset();
          }
        }
      }
      allPlayers.filteredCall(A_CHECK, J_PLAYER);
      bool passResponse = allPlayers.Pass();
      if (passResponse) { partie = P_JEU_REPONSE; }
      break;

    case P_CHOIX_RESET:
      allPlayers.reset();
      bConfig.reset();
      partie = P_CHOIX_ANIM;
      break;

    default:
      DEBUG_PRINTLN("Default");
      partie = P_CHOIX_RESET;
      break;

谢谢

【问题讨论】:

  • 第一种情况没有中断是故意的吗?
  • 是的,如果我添加它什么都不会改变

标签: c++ arduino switch-statement


【解决方案1】:

你不能在 case 中声明变量: https://complete-concrete-concise.com/programming/c/keyword-switch-case-default/ Can I declare variables inside an Objective-C switch statement?

bool passResponse = allPlayers.Pass();

错了——你必须把它括起来:

case P_JEU:
      // Bug
      if (bConfig.isPressed()) {
        if (bConfig.getPressDuration()) {
          if (bConfig.getPressDuration() <= 2000) {
            partie = P_CHOIX_RESET;
          } else {
            bConfig.reset();
          }
        }
      }
      allPlayers.filteredCall(A_CHECK, J_PLAYER);
      {
          bool passResponse = allPlayers.Pass();
          if (passResponse) { partie = P_JEU_REPONSE; }
      }
      break;

【讨论】:

  • 非常感谢,确实是这个问题
  • 这个答案是错误的。 C 允许在 switch 语句中声明,但不能紧跟在 case 标签之后。可能存在范围问题。尽管 OP 接受了答案,但肯定还有其他问题。此外,此答案中给出的链接很糟糕。第一个没有提到声明并且错误地说控制表达式被转换(不仅仅是提升)为int并且可以是浮点类型,第二个不是C。
  • Objective-C 引用与这里有什么关系?删除。
  • TomServo,在此处发表评论之前,您至少应该阅读链接的帖子(和答案)。在那里你可以读到关于 C 的内容。如果我的答案有误,那是一回事——它只是跳进了我的眼睛。但只是发表评论而不给出真正的替代解决方案是另一回事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多