发布日期:2016-01-05 17:10 来源: 标签: 编程语言 开发语言 C++入门教程 C++中switch语句
本章我们主要学习C++中switch语句的使用,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。

允许根据整型表达式的值在多个代码段中进行选择。

语法

   switch ( expression )
case constant-expression : statement
[default  : statement]

备注

expression 必须属于整型或存在到整型的明确转换的类类型。

switch 语句体由一系列 case 标签和一个可选 default 标签组成。 case 语句中的两个常量表达式的计算结果不能为同一个值。 default 标签只能出现一次。标记语句不是语法要求,但如果它们不存在,switch 语句是无意义的。默认语句无需显示在末尾;它可以显示在 switch 语句体的任何位置。case 或 default 标签只能显示在 switch 语句内。

每个 case 标签中的 constant-expression 将转换为 expression 类型,并将与 expression 比较是否等效。控制到其 case constant-expressionexpression 的值匹配的语句的传递。下表中显示了生成的行为。

switch 语句行为

如果找到匹配的表达式,则后续 casedefault 标签不会妨碍控制。break 语句用于停止执行并将控制转移到 switch 语句之后的语句。如果没有 break 语句,则将执行从匹配的 case 标签到 switch 末尾的每个语句,包括 default例如:

// switch_statement1.cpp
#include <stdio.h>

int main() {
   char *buffer = "Any character stream";
   int capa, lettera, nota;
   char c;
   capa = lettera = nota = 0;

   while ( c = *buffer++ )   // Walks buffer until NULL
   {
      switch ( c )
      {
         case 'A':
            capa++;
            break;
         case 'a':
            lettera++;
            break;
         default:
            nota++;
      }
   }
   printf_s( "\nUppercase a: %d\nLowercase a: %d\nTotal: %d\n",
      capa, lettera, (capa + lettera + nota) );
}

在上面的示例中,如果 c 是大写 A,则 capa 将递增。 capa++ 之后的 break 语句会终止 switch 语句体的执行并将控制转移到 while 循环。如果没有 break 语句,letteranota 也将递增。 case 'a'break 语句也能达到类似的目的。如果 c 是小写 a,则 lettera 将递增,并且 break 语句将终止 switch 语句体。如果 c 不是 aA,则将执行 default 语句。

switch 语句的内部块可以包含带有初始化的定义,前提是可以访问到它们 - 即,所有可能的执行路径都不会绕过它们。使用这些声明引入的名称具有局部范围。例如:

// switch_statement2.cpp
// C2360 expected
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
   switch( tolower( *argv[1] ) )
   {
       // Error. Unreachable declaration.
       char szChEntered[] = "Character entered was: ";

   case 'a' :
       {
       // Declaration of szChEntered OK. Local scope.
       char szChEntered[] = "Character entered was: ";
       cout << szChEntered << "a\n";
       }
       break;

   case 'b' :
       // Value of szChEntered undefined.
       cout << szChEntered << "b\n";
       break;

   default:
       // Value of szChEntered undefined.
       cout << szChEntered << "neither a nor b\n";
       break;
   }
}

switch 语句可以嵌套。在这种情况下,casedefault 标签将与封装它们的最近的 switch 语句关联。

相关评论

专题信息
    Visual C++是一个功能强大的可视化软件开发工具,是高等院校计算机及相关专业主要核心课程。 本教程对Visual C++ 的应用与开发进行了详细系统的介绍,内容主要包括:Visual C++程序的建立,菜单、工具栏和状态栏的创建,对话框和常用控件,窗口、文档与视图,图形绘制,数据库应用,多媒体技术等。 本教程以案例教学为主,各章节都附有大量的实例,并且操作步骤详细,有利于引导读者更好的消化、理解和实际应用本章节所学的知识内容,希望大家能多多支持中国站长网络学院!