Программирование >>  Инициализация объектов класса, структура 

1 ... 64 65 66 [ 67 ] 68 69 70 ... 395


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 не разрешается. Данный



1 ... 64 65 66 [ 67 ] 68 69 70 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика