C++ Оператор switch

Принятие решений в C++

В C++ оператор switch используется для выполнения различных блоков кода в зависимости от разных условий. Его часто используют для замены серии операторов if-else, что делает код более понятным и удобочитаемым.

aswitchОператор позволяет проверять переменную на равенство нескольким значениям. Каждое значение называется case, и проверяемая переменная проверяется по каждомуswitch caseчтобы выполнить проверку.

Синтаксис

В C++switchСинтаксис оператора:

switch(выражение){ case константа-выражение : инструкция(s); break; // Необязательно case константа-выражение : инструкция(s); break; // Необязательно // Можно иметь любое количество операторов case default : // Необязательно инструкция(s); }

switchОператор должен соответствовать следующим правилам:

  • switchв операторевыражениедолжно иметь целочисленный или перечисляемый тип, либо тип класса, имеющего единственную функцию преобразования, преобразующую его в целочисленный или перечисляемый тип.
  • Оператор switch может содержать любое количество операторов case. За каждым case следует значение для сравнения и двоеточие.
  • Значение caseconstant-expressionдолжно иметь тот же тип данных, что и переменная в switch, и должно быть константой или литералом.
  • Когда проверяемая переменная равна константе в case, операторы, следующие за case, будут выполняться до тех пор, пока не будет достигнут операторbreak.
  • Когда встречается операторbreak, switch завершается, и поток управления переходит к следующей строке после оператора switch.
  • Не каждый case должен включатьbreak. Если оператор case не содержитbreak, поток управленияпродолжитсяпоследующие case, пока не встретится break.
  • aswitch-оператор может иметь необязательныйdefaultcase, появляющийся в конце switch. default case можно использовать для выполнения задачи, когда ни один из вышеперечисленных case не истинен. В default casebreak-оператор не требуется.

Блок-схема

C++ 中的 switch 语句

Пример

Пример

#include <iostream>

int main() {
    int day = 4;

    switch (day) {
        case 1:
            std::cout << "Monday" << std::endl;
            break;
        case 2:
            std::cout << "Tuesday" << std::endl;
            break;
        case 3:
            std::cout << "Wednesday" << std::endl;
            break;
        case 4:
            std::cout << "Четверг" << std::endl;
            break;
        case 5:
            std::cout << "Пятница" << std::endl;
            break;
        case 6:
            std::cout << "Суббота" << std::endl;
            break;
        case 7:
            std::cout << "Воскресенье" << std::endl;
            break;
        default:
            std::cout << "Неверный день" << std::endl;
    }

    return 0;
}

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

Thursday

Тип char в операторах switch:

Пример 2

#include <iostream> using namespace std; int main () { // Объявление локальной переменной char grade = 'D'; switch(grade) { case 'A' : cout << "Отлично!" << endl; break; case 'B' : case 'C' : cout << "Молодец" << endl; break; case 'D' : cout << "Вы сдали" << endl; break; case 'F' : cout << "Попробуйте еще раз" << endl; break; default : cout << "Неверный балл" << endl; } cout << "Ваш балл:" << grade << endl; return 0; }

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

您通过了
您的成绩是 D

Примечания:

  • breakОператор:каждыйcaseв конце оператораbreakОператор необходим для выхода изswitchоператора. Если он отсутствуетbreak, программа продолжит выполнять следующийcase, это называется "fall-through".
  • defaultОператор: defaultОператор необязателен, но обычно во всехcaseкогда ни один из них не совпадает, он используется для обработки всех неперечисленных случаев.
  • Тип выражения: switchВыражение обычно имеет целочисленный тип или тип перечисления; типы с плавающей запятой и строковые типы не подходят.

Иногда мы можем намеренно использовать проваливание. В следующем коде, если number равно 2 или 3, будет выполнен один и тот же блок кода.

Пример

#include <iostream>

int main() {
    int number = 2;

    switch (number) {
        case 1:
            std::cout << "Number is 1" << std::endl;
            break;
        case 2:
        case 3:
            std::cout << "Number is 2 or 3" << std::endl;
            break;
        default:
            std::cout << "Number is not 1, 2, or 3" << std::endl;
    }

    return 0;
}

Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:

Number is 2 or 3

Принятие решений в C++

Другие расширения