C++中使用 switch-case 进行条件处理

C++中使用 switch-case 进行条件处理

switch-case 让您能够将特定表达式与一系列常量进行比较,并根据表达式的值时执行不同的操作。在这种结构中,经常会使用 C++新增的关键字 switch、 case、 default 和 break。

switch-case 结构的语法如下:

switch(expression)
{
    case LabelA:
        DoSomething;
        break;
    case LabelB:
        DoSomethingElse;
        break;
        // And so on...
    default:
        DoStuffWhenExpressionIsNotHandledAbove;
        break;
}

上述代码计算 expression 的值,并将其与每个 case 标签进行比较。每个 case 标签都必须是常量,如果 expression 的值与 case 标签相等,就执行标签后面的代码。如果 expression 与 LabelA 不相等,将把 expression 与 LabelB 进行比较。如果它与 LabelB 相同,就执行 DoSomethingElse。将不断重复这个过程,直到遇到 break。这是您首次使用关键字 break,它导致程序退出当前代码块。 break 并非必不可少,但如果省略它,将不断与后面的标签进行比较,这并非您希望的。 default 也是可选的,它用于执行 expression 不与 switch-case 中的任何标签匹配时应执行的操作。

提示:

switch-case 结构非常适合与枚举量结合使用。

以下示例程序使用了 switch-case 结构,指出一个星期的各天是以哪颗星星命名的,也使用了枚举常量:

#include 
using namespace std;

int main()
{
    enum DaysOfWeek
    {
        Sunday = 0,
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday
    };

    cout << "Find what days of the week are named after!" << endl;
    cout << "Enter a number for a day (Sunday = 0): ";

    int dayInput = Sunday;   // Initialize to Sunday
    cin >> dayInput;

    switch(dayInput)
    {
        case Sunday:
            cout << "Sunday was named after the Sun" << endl;
            break;

        case Monday:
            cout << "Monday was named after the Moon" << endl;
            break;

        case Tuesday:
            cout << "Tuesday was named after Mars" << endl;
            break;

        case Wednesday:
            cout << "Wednesday was named after Mercury" << endl;
            break;

        case Thursday:
            cout << "Thursday was named after Jupiter" << endl;
            break;

        case Friday:
            cout << "Friday was named after Venus" << endl;
            break;

        case Saturday:
            cout << "Saturday was named after Saturn" << endl;
            break;

        default:
            cout << "Wrong input, execute again" << endl;
            break;
    }

    return 0;
}

输出:

Find what days of the week are named after!
Enter a number for a day (Sunday = 0): 5
Friday was named after Venus

再次运行的输出:

Find what days of the week are named after!
Enter a number for a day (Sunday = 0): 9
Wrong input, execute again

分析:

第 22~55 行的 switch-case 结构根据用户输入的整数(存储在变量 dayInput 中)生成不同的输出。用户输入数字 5 时,应用程序将 switch 表达式( dayInput,其值为 5)与标签进行比较,并跳过前 4 个标签后面的代码,因为这些标签为 Sunday( 0) ~Thursday( 4),它们都与 5 不相等。到达标签 Friday 后,由于 switch 表达式的值( 5)与枚举量 Friday 相等,因此执行该标签后面的代码,并在到达第 46行的 break 后退出 swtich 结构。第二次运行时提供的值无效,因此到达 default 后执行它后面的代码,显示一条让用户再执行一次的消息。
这个程序使用的是 switch-case, switch-case 版本的结构化程度更高,可能非常适合不仅仅将一行文本显示在屏幕上的情形(在这种情形下,可将代码放在大括号内,组成语句块)。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

你可能感兴趣的:(C++编程基础,c++)