Языка C ключевые слова , часто используемые в переключатель структуры -случае являются переключатель , случай , по умолчанию , и перерыв . Требуются только переключатель и корпус . Вы можете опустить условие по умолчанию . И ключевое слово break используется, чтобы избежать падения структуры через структуру, но иногда это может быть полезным эффектом.

Например, когда вы должны сопоставить несколько условий, составление последовательности операторов case позволяет сопоставить несколько условий одному и тому же набору операторов. Этот прием часто используется для систем меню:

switch(input)
{
    case 'X':
    case 'x':
    case 'Q':
    case 'q':
        /* quit/exit the program */
...

Эти четыре сравнения регистров соответствуют заглавным и строчным буквам X и Q. Одни и те же операторы выполняются независимо от того, является ли значение переменной переменной inputX, x, Q или q.

В качестве другого примера, следующий код пытается разделить строку на отдельные слова. Набор операторов case соответствует различным символам, которые могут появляться после слова в предложении. Выполнение выполняется через каждого из них, так что один набор операторов выполняется для всех соответствующих условий.

#include <stdio.h>

int main ()
{
    char string [] = "Привет, странная маленькая планета \ n";
    int x = 0;

    while (строка [x])
    {
        переключатель (строка [x])
        {
            дело ' ':
            дело '.':
            дело ',':
            дело '!':
            дело '?':
            дело ';':
            дело ':':
            case '\ n':
                putchar ( '\ п');
                перерыв;
            дефолт:
                putchar (строка [x]);
        }
        х ++;
    }

    Возвращение (0);
}

В то время как цикл обрабатывает всю строку. Внутри цикла структура переключателя исследует различные символы. Если символ является разделителем слов, выводится символ новой строки, в противном случае выводится символ в строке, образуя слово.

Вот пример прогона:

Hello
there
strange
little
planet

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

Естественно, этот код не без проблем.

Во-первых, может быть проще использовать функцию ctype для проверки границ слов. Тем не менее, если бы я кодировал этот тип решения с головы до головы, я бы, вероятно, использовал бы структуру switch-case вместо функции ctype.

Во-вторых, код хорошо ловит пробелы между словами, но испытывает трудности, когда между словами попадают два разделителя. Таким образом, если за словом следует запятая и пробел, в выводе отображается пустая строка.

В качестве теста, если массив string[]изменен на чтение "Hello there strange, little planet\n", вывод будет выглядеть так:

Hello
there
strange

little
planet

Пустая строка вызвана пробелом после запятой: для каждого символа выводится новая строка.

На уроке на следующей неделе я представлю хитрый трюк для решения этой проблемы.