4

我在一次采访中被问到这个问题。我回答说这是一个条件构造,因为

  • 它执行一次,不像循环可以执行多次。
  • 没有循环控制机制,只有根据不同情况进行条件切换。

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

他还问我为什么break;语句适用于 switch-case 的原因,因为break;它只适用于循环。这个问题我无法回答。

4

3 回答 3

12

在 C++ 中

switchselection-statement

n3376 6.4/1 和 6.4.2 大约switch

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

breakjump-statement

n3376 6.6.1/1

break 语句只能出现在迭代语句或 switch 语句中,并导致最小的封闭迭代语句或 switch 语句终止;控制传递到终止语句之后的语句(如果有)。

于 2013-05-16T06:37:51.210 回答
5

C 答案

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

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

C11 6.8.6.3

break 语句应仅出现在或作为 switch 主体或循环主体出现。


所以回答面试问题:

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

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

为什么要休息;语句与 switch-case 一起使用,因为,break; 仅适用于循环

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

于 2013-05-16T07:01:38.837 回答
0

switch case 是一种包装指令块并执行(部分)指令的方式,从这里开始到这里结束。匹配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 ;.

这些break陈述说明了在哪里停止,并且意味着可以省略一些案例陈述:

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

Caseone现在将执行 A、B 和 C,但不执行 D。

于 2013-05-16T06:50:37.110 回答