C中使用switch语句的疑问

发布于 2024-10-21 23:44:15 字数 373 浏览 3 评论 0原文

我有一个疑问:为什么我在 i=3 i=7 时得到输出?

main()
{
  int i;
  scanf("%d",&i);
  switch(i)
  {
        case 3: printf("message3");
        default:
               if(i==4)
               printf("message4");
        case 2:printf("message2");
               break;
        case 1:printf("Message1");
  }
}

I have a doubt: why am I getting outputs when i=3 and when i=7?

main()
{
  int i;
  scanf("%d",&i);
  switch(i)
  {
        case 3: printf("message3");
        default:
               if(i==4)
               printf("message4");
        case 2:printf("message2");
               break;
        case 1:printf("Message1");
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一直在等你来 2024-10-28 23:44:15

好吧,

i == 3 将打印 message3 和 message2
i == 4 将打印 message4 abd message2
i 的每个其他值都会打印 message2

使用 break 终止匹配的处理。

Well,

i == 3 will print message3 and message2
i == 4 will print message4 abd message2
every other value of i will print message2

use break to terminate processing of a match.

许久 2024-10-28 23:44:15

@Shubham。如果我重复您已经知道的内容,请原谅我。在某些方面,我正在扩展@Henk 已经指出的内容。

switch 语句中,casedefault 标签的作用只是确定从哪里开始执行。一旦确定了第一个标签,其余标签就没有意义了。执行是“失败”。因此,我们必须使用break来停止并退出switch

在您的代码中,如果 i == 3case 3 是第一行执行。然后执行 case 3defaultcase 2,然后执行 break

如果 i3 以外的任何值,则执行 default,然后执行 case 2,然后退出 切换。我认为由于 default 的位置,人们永远不会执行case 1

@Shubham. Please forgive me if I am repeating what you already know. And in some ways, I am expanding what @Henk already pointed out.

In switch statement, the role of case and default labels are only to determine where the execution should start. Once the first label is determined then rest of the labels have no meaning. The execution is "fall through". Therefore, we have to use break to stop and exit the switch.

In your code, if i == 3 then case 3 is the first line of execution. Then case 3, default and case 2 are executed followed by break.

If i is any value other than 3 then default is executed followed by case 2 and then exit the switch. I don't think one will ever get to execute case 1 due to the location of default.

澉约 2024-10-28 23:44:15

在情况 3 和 default 之后,您没有 break

You don't have a break after case 3 and default.

暮凉 2024-10-28 23:44:15

case 3 之后没有break。因此,switch 失败并执行 default 语句。

After case 3 there is no break. So, switch falls through and executes default statement too.

红焚 2024-10-28 23:44:15

default 案例的顺序并不决定该案例何时执行。当 switch 变量与 case 表达式中的任何值都不匹配时,将执行 default case。

  • 对于上面的代码,当执行 case 1 之后的代码时,
  • 1 将打印“Message 1” 2 将打印“message 2”当执行case 2之后的代码时,
  • 3将打印“message 3message2”当执行case 3之后的代码和fallthrough< /strong> 为 defaultfallthroughcase 2
  • 4 执行以下代码时将打印“message 4message2” defaultfallthroughcase 2
  • 执行 default case 时,任何其他值都会打印“message 2”,并且fallthroughcase 2

我有时会首先使用默认值对开关进行编码

switch (ch) {
  default: break; /* do nothing */
  case '.': ch = ','; break; /* swap commas */
  case ',': ch = '.'; break; /* and periods */
}

The order of the default case does not determine when that case is executed. The default case is executed when the switch variable does not match any of the values in a case expression.

For the code above a value of

  • 1 will print "Message 1" when executing the code following the case 1
  • 2 will print "message 2" when executing the code following the case 2
  • 3 will print "message 3message2" when executing the code following the case 3 and fallthrough to default and fallthrough to case 2
  • 4 will print "message 4message2" when executing the code following the default and fallthrough to case 2
  • any other value will print "message 2" when executing the default case and fallthrough to case 2

I some times code my switches with the default first

switch (ch) {
  default: break; /* do nothing */
  case '.': ch = ','; break; /* swap commas */
  case ',': ch = '.'; break; /* and periods */
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文