|
Программирование >> Инициализация объектов класса, структура
switch ( ch ) { case a: case A : ++aCnt; break; case e: case E: ++eCnt; break; case i: case I: ++iCnt; break; case o: case O: ++oCnt; break; case u: case U: ++uCnt; break; отнесены к гласным. Исправить ситуацию можно следующим образом: Метка default является аналогом части else инструкции if-else. Инструкции, соответствующие default, выполняются, если условие не отвечает ни одной из меток case. Например, добавим к нашей программе подсчет суммарного количества согласных: switch ( ch ) допустим синтаксис case a: case e: case i: case o: case u: ++vowe1Cnt; break; В данной реализации все еще осталась одна проблема: как будут восприняты слова типа [ UNIX I Наша программа не понимает заглавных букв, поэтому заглавные U и I не будут #include <iostream> #include <ctype.h> int main() { char ch; int aCnt=0, eCnt=0, iCnt=0, oCnt=0, uCnt=0, consonantCount=0; while ( cin >> ch ) switch ( ch ) { case a: case A: ++aCnt; break; case e: case E: ++eCnt; break; case i: case I: ++iCnt; break; case o: case O: ++oCnt; break; case u: case U: ++uCnt; break; default: if ( isa1pha( ch ) ) ++consonantCnt; break; cout Встретилась a: \t << aCnt Встретилась e: \t << eCnt Встретилась i: \t << iCnt Встретилась o: \t << oCnt Встретилась u: \t << uCnt Встретилось согласн: \t \n \n \n \n \n consonantCnt isalpha() - функция стандартной библиотеки С; она возвращает true, если ее аргумент является буквой. isalpha() объявлена в заголовочном файле ctype.h. (Функции из ctype.h мы будем рассматривать в главе 6.) Хотя оператор break функционально не нужен после последней метки в инструкции switch, лучше его все-таки ставить. Причина проста: если мы впоследствии захотим добавить еще одну метку после case, то с большой вероятностью забудем вписать недостающий break. Условная часть инструкции switch может содержать объявление, как в следующем примере: switch( int ival = get response() ) и это значение ival инициализируется значением, получаемым от get response() , сравнивается со значениями меток case. Переменная ival видна внутри блока switch, но не вне его. case illegal definition: ошибка: объявление не может употребляться в этом месте string file name = get file name(); ... фрагмент кода не будет пропущен компилятором: break; Если бы разрешалось объявлять переменную таким образом, то ее было бы видно во всем блоке switch, однако инициализируется она только в том случае, если выполнение прошло через данную метку case. Мы можем употребить в этом месте составную инструкцию, тогда объявление переменной file name будет синтаксически правильным. Использование блока гарантирует, что объявленная переменная видна только внутри него, а в этом контексте case ok: { ок string file name = get file name(); ... она заведомо инициализирована. Вот как выглядит правильный текст: break; Упражнение 5.5 Модифицируйте программу из данного раздела так, чтобы она подсчитывала не только буквы, но и встретившиеся пробелы, символы табуляции и новой строки. Упражнение 5.6 Модифицируйте программу из данного раздела так, чтобы она подсчитывала также количество встретившихся двухсимвольных последовательностей ff, fl и fi. Упражнение 5.7 Найдите и исправьте ошибки в следующих примерах: switch ( ival ) { case a: aCnt++; case e: eCnt++; default: iouCnt++; (a) (b) Помещать же инструкцию объявления внутри тела блока switch не разрешается. Данный
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |