【问题标题】:How to compare enum values in switch-case? [closed]如何比较 switch-case 中的枚举值? [关闭]
【发布时间】:2017-03-01 05:20:14
【问题描述】:

为什么默认情况下会触发以下情况:

    typedef enum {VALUE_ONE, VALUE_TWO} someValue;

    typedef struct {
      someValue value;
    } myStruct;

---main() BELOW---

    myStruct* myPtr = malloc(sizeof(myStruct));
    myPtr->value = VALUE_ONE;

    switch (myPtr->value) {
      case VALUE_ONE:
        ...;

      case VALUE_TWO:
        ...;

      default:
        ...;
    }

如果我使用 if 语句,代码将正常工作。目前,我想使用 switch-case 来打印出价值特定的短语。

更新:忘记了 break 语句。谢谢大家!

【问题讨论】:

  • 你是否在每个case的末尾使用break;?
  • 以上代码也可以在 switch-case 中使用。请注意,您需要在每个案例之后添加一个中断。
  • 哈哈哈,尴尬了。忘记休息了。

标签: c pointers enums switch-statement


【解决方案1】:

在switch 的情况下使用break 语句,这样当到达break 语句时,switch 终止并且控制流跳转到switch 语句之后的下一行。

switch (myPtr->value) {
      case VALUE_ONE:
        ...;
        break;

      case VALUE_TWO:
        ...;
       break;

      default:
        ...;
    }

【讨论】:

    【解决方案2】:

    在使用 switch case 语句时,你必须这样做才能得到正确的结果

    switch ( <variable> ) {
    case 1:
      Code to execute if <variable> == this-value
      break;
    case 2:
      Code to execute if <variable> == that-value
      break;
    ...
    default:
      Code to execute if <variable> does not equal the value following any of the cases
      break;
    }
    

    假设你错过了 case 2 的 break 语句,所以只要 switch-case 2 为真,它将进​​入所有其他情况(在 case 2 之后),直到代码遇到 break 语句。 Break 语句用于在执行所需的操作后退出案例。 希望很清楚。

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多