В C
символьных строковых литералах и односимвольных константах есть ряд «специальных» символов, которые не могут быть легко представлены в тексте исходного кода. Примерами являются символ символ новой строки , символ nul (терминатор) и символ возврата каретки .
. Этот язык позволяет нам кодерам включать такие символы с помощью escape-последовательности - которые вводятся с помощью символа backsla sh (\
), за которым следует соответственно описательный «обычный» символ. Таким образом, мы можем указать символ newline , используя 'экранированный' 'n', например: char NewLine = '\n';
аналогично nul и возврат каретки символов представлены \0
и \r
соответственно.
Однако это соглашение вызывает проблему, когда мы на самом деле хотим указать сам символ backsla sh! Итак, для этого мы указываем escape-последовательность, где вторым символом является и обратный слеш; таким образом, код char BackSlash = '\\';
присваивает BackSlash
значение (вероятно, ASCII, но не обязательно) самого backsla sh.
В вашем коде тест после first c = getchar()
проверяет наличие входного символа backsla sh - который, если найден, сигнализирует о начале одной из этих "escape-последовательностей" - если она не найдена, мы можем просто вернуть фактический ввод символов. Однако, если мы, таким образом, обнаруживаем начало escape-последовательности, нам нужно проверить следующий символ: если это «n» (case 'n':
), мы возвращаем escape-последовательность, представляющую символ новой строки (return '\n';
); если это другой backsla sh (case '\\':
), мы возвращаем последовательность для фактического backsla sh (return '\';).
Другие стандартные escape-последовательности не являются ' не обнаружены в вашем коде, но было бы тривиально добавить дополнительные проверки для них.
Пожалуйста, не стесняйтесь просить дальнейших разъяснений и / или объяснений.