首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中开关语句的语法?

C中开关语句的语法?
EN

Stack Overflow用户
提问于 2019-09-28 19:35:40
回答 3查看 625关注 0票数 3

我试图理解C中的开关语句(我使用Ubuntuv16.04中的gcc )。我能够理解它的语义,但对它的语法有以下两个问题:

  1. ,我在阅读了一些使用开关语句的例子后注意到,一个接一个的符号有时用''括起来,有时却没有。例如:case 1case 'a'。我检查了开关语句(https://linux.die.net/man/1/switch)的Linux,在那里,它们没有为字符串使用“”。因此,我不知道该怎么做,
  2. 有时将单个案例中的代码块封装在{ }中,有时则不是。我以前读过,多行语句需要用{ }括起来,但对于单行语句不一定像在for循环中那样,而循环用单行语句等等。但是有时一条case语句有1行代码(例如a *= 5;),然后是break语句(所以总共有2条语句),但是这两行都不包含在{ }中。Linux手册没有提到这一点。有人能澄清这一点吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-28 19:57:54

(1) a为ascii值97。Ascii是一种编码字符的标准方法,它也在许多其他语言中使用。本质上,每个字符都表示为一个数值。所以当你有:

代码语言:javascript
运行
复制
...
case 'a':
...

如果开关变量等于97,则实际上正在执行下面的代码。在你的例子中:

代码语言:javascript
运行
复制
case '1':

检查开关变量是否等于char '1',即ascii值49。

(2)用大括号括起来的case语句改变了大括号之间变量的范围。请考虑以下示例:

代码语言:javascript
运行
复制
switch (sw) {
    case 1:
        int b = 2;
        sw += b;
        break;
    case 2:
        int b = 3;
        sw += b;
        break;
    default:
        break;
}

这是因为在案例1和案例2中,您正在实例化一个名为"b“的整数。因为这两个case语句都在同一个变量作用域( switch语句的作用域)中,所以编译器会给出一个错误,因为您要用相同的名称和类型实例化一个变量两次。现在考虑下面的代码:

代码语言:javascript
运行
复制
    switch (sw) {
    case 1: {
        int b = 2;
        sw += b;
        break;
    } case 2: {
        int b = 3;
        sw += b;
        break;
    } default: {
        break;
    }
}

这段代码编译。通过将每个案例的代码封装在大括号中,您将为每个案例赋予自己的变量范围,在每个范围中,它可以重新定义同一变量一次。

票数 2
EN

Stack Overflow用户

发布于 2019-09-28 19:55:40

回答你的问题:

q1: 1和1是不一样的。后者被单引号包围,在C语言中,单引号总是表示一个字符.根据C实现,该字符将以ASCII格式存储,数值表示为49。将ASCII格式的字符看作是可以用数字表示的,但数字不能表示,比较'1' == 1是合法的,因为该字符将被隐式转换为整数。

q2:用大括号包一个箱子是可选的。您可以在任何时候使用大括号声明作用域。更多信息:https://www.geeksforgeeks.org/scope-rules-in-c/C Switch-case curly braces after every case

票数 2
EN

Stack Overflow用户

发布于 2019-09-28 19:54:33

(1)您询问的是C中的switch语句(特别是gcc),但是您所包含的链接是用于Linux中的switch语句。这是两种不同的语言!在C中,单引号“”用于字符。字符是单个字母/数字/符号/等,而不是一个或多个字符的字符串。因此,case 1:将匹配数字1,而case '1':将匹配字符'1‘。数字的类型类似于int或long。字符的类型为char。所以你是否使用'‘取决于你是想匹配一个字符还是一个数字。

(2) {}是不必要的。您可以选择使用它们对代码块进行可视化分组,但不必这样做。还可以使用{}限制变量的作用域。变量范围是一个很大的主题,请参阅以下内容以获得更多信息:https://www.w3schools.in/c-tutorial/variable-scope/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58149682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档