繁体   English   中英

switch case是循环还是条件构造?

[英]Is switch case a loop or a conditional construct?

我在接受采访时被问到这个问题。 我回答说这是一个有条件的结构,因为

  • 它执行一次,不像一个具有多次执行能力的循环。
  • 没有循环控制机制,只有基于不同情况的条件切换。

那么我的答案是对还是错,有更好的答案吗?

他也问我break;的原因break; 语句与switch-case一起工作,因为, break; 仅适用于循环。 这个问题我无法回答。

在C ++中

switchselection-statement

n3376 6.4 / 1和6.4.2是关于switch

selection-statement:
...
switch ( condition ) statement

breakjump-statement

n3376 6.6.1 / 1

break语句只能在iteration-statement或switch语句中出现,并导致最小的封闭iteration-statement或switch语句终止; 控制权传递给终止语句后的语句(如果有)。

C回答

没有称为“条件构造”的正式术语。 C标准使用术语选择语句 C语言有三种不同的选择语句: ifif-elseswitch (C11 6.8.4)。 循环在迭代语句的类别下排序(6.8.5)。

break语句是一个跳转语句,就像goto一样。 它对允许出现的位置有一些限制:

C11 6.8.6.3

break语句只应出现在开关体或循环体中。


所以回答面试问题:

switch case是循环还是条件构造?

如果你通过条件构造表示一个选择语句,那么是的, switch是一个条件结构。

为什么打破; 语句与switch-case一起工作,因为,break; 仅适用于循环

不,问题是不正确的,它不仅适用于循环。 它适用于switch 循环。 这是因为C语言是以这种方式定义的(6.8.6.3)。

开关盒是一种包装指令块并说出执行(部分)的方法,从这里开始到此结束。 匹配的case ,标志着开始和后来的break标志着结束。

该块可能是一些指令:

{
     instruction_A;
     instruction_B;
     instruction_C;
     instruction_D;
}

case语句说明根据switch值动态启动的位置:

switch(value)
{
case one:
     instruction_A;
     instruction_B;
case two:
     instruction_C;
case three:
     instruction_D;
}

在第one情况下,将调用所有指令,因为没有中断。 案例two将执行C和D,如果没有例外(c;。

break语句说明要停止的地方,并且意味着可以通过一些case语句:

switch(value)
{
case one:
     instruction_A;
     instruction_B;
case two:
     instruction_C;
     break;
case three:
     instruction_D;
}

案例one现在将执行A,B和C,但不执行D.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM