Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 64

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Однако Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ стандартноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ case ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ дСйствий. Π’ Ρ‚Π°ΠΊΠΈΡ… ситуациях достаточно ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ нСсколько ΠΌΠ΅Ρ‚ΠΎΠΊ case.

НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство гласных Ρ‚Π°ΠΊ:

unsigned vowelCnt = 0;

// ...

switch (ch) {

// для ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° vowelCnt ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ любая Π±ΡƒΠΊΠ²Π° Π°, Π΅, i, ΠΎ ΠΈΠ»ΠΈ u

case 'a':

case 'e':

case 'i':

case 'o':

case 'u':

 ++vowelCnt;

 break;

}

Π—Π΄Π΅ΡΡŒ располоТСно нСсколько ΠΌΠ΅Ρ‚ΠΎΠΊ case подряд Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ любой гласной Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ch Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ язык Π‘++ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ case Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС, вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ строкС:

switch (ch) {

// Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ допустимый синтаксис

case 'a': case 'e': case 'i': case 'o': case 'u':

 ++vowelCnt;

 break;

}

Π‘Π»ΡƒΡ‡Π°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ, довольно Ρ€Π΅Π΄ΠΊΠΈ, поэтому ΠΈΡ… слСдуСт ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, объясняя Π»ΠΎΠ³ΠΈΠΊΡƒ дСйствий.

ΠŸΡ€ΠΎΠΏΡƒΡΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break β€” вСсьма распространСнная ошибка

Π’Π΅ΡΡŒΠΌΠ° распространСно Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с совпавшСй ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ case. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ подсчСта гласных Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ switch:

// Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄!

switch (ch) {

case 'a' :

 ++aCnt; // Упс! НСобходим ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break

case 'e':

 ++eCnt; // Упс! НСобходим ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break

case 'i':

 ++iCnt; // Упс! НСобходим ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break

case 'o':

 ++oCnt; // Упс! НСобходим ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break

case 'u':

 ++uCnt;

}

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ происходящСС, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ch являСтся 'e'. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ΄Ρƒ послС ΠΌΠ΅Ρ‚ΠΊΠΈ case 'e', Π³Π΄Π΅ происходит ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ eCnt. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ продолТаСтся Π΄Π°Π»Π΅Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΊΠΈ case, увСличивая Ρ‚Π°ΠΊΠΆΠ΅ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… iCnt, oCnt ΠΈ uCnt.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΈ Π½Π΅ обязатСлСн послС послСднСй ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ всС ΠΆΠ΅ рСкомСндуСтся. Π’Π΅Π΄ΡŒ Ссли впослСдствии ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ case, отсутствиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break послС ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ послСднСй ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π΅ создаст ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠœΠ΅Ρ‚ΠΊΠ° default

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ послС ΠΌΠ΅Ρ‚ΠΊΠΈ default Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Ссли Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠΊ case Π½Π΅ соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ выраТСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch. НапримСр, Π² рассматриваСмый ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ счСтчик нСгласных Π±ΡƒΠΊΠ². Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого счСтчика ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ otherCnt Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² случаС default:

// Ссли ch гласная, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ счСтчик

switch (ch) {

case 'a': case 'e': case 'i': case 'o': case 'u':

 ++vowelCnt;

 break;

default:

 ++otherCnt;

 break;

}

Π’ этой вСрсии, Ссли пСрСмСнная ch Π½Π΅ содСрТит Π³Π»Π°ΡΠ½ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ ΠΌΠ΅Ρ‚ΠΊΠ΅ default ΠΈ увСличится Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика otherCnt.

Π Π°Π·Π΄Π΅Π» default ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всСгда, Π΄Π°ΠΆΠ΅ Ссли Π² Π½Π΅ΠΌ Π½Π΅ происходит Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий. ВпослСдствии это ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ случай default Π½Π΅ Π±Ρ‹Π» Π·Π°Π±Ρ‹Ρ‚, Ρ‚.Π΅. для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаСв Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

ΠœΠ΅Ρ‚ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ; ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠ΅ case. Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch заканчиваСтся Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ default, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ осущСствляСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий, Π·Π° ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ default Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ пустой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ пустой Π±Π»ΠΎΠΊ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ switch

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch способно ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΊΠΈ case. Когда Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠ΅ case, вСсь располоТСнный Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½. Π€Π°ΠΊΡ‚ игнорирования ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ интСрСсный вопрос: Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ?

ΠžΡ‚Π²Π΅Ρ‚ прост: нСдопустим ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с мСста, Π³Π΄Π΅ пСрСмСнная с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π²Ρ‹ΡˆΠ»Π° ΠΈΠ· области видимости ΠΊ мСсту, Π³Π΄Π΅ эта пСрСмСнная находится Π² области видимости.

case true:

 // этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch нСдопустим, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

 // ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ

 string file_name; // ошибка: Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ нСявно

                   // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

 int ival = 0;     // ошибка: Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ нСявно

                   // ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ

 int jval;         // ok: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ jval Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°

 break;

case false:

 // ok: jval находится Π² области видимости, Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°

 jval = next_num();     // ok: ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ jval

 if (file_name.empty()) // file_name находится Π² области видимости, Π½ΠΎ

                        // ΠΎΠ½Π° Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°

 // ...

Если Π±Ρ‹ этот ΠΊΠΎΠ΄ Π±Ρ‹Π» допустим, Ρ‚ΠΎ любой ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»ΡƒΡ‡Π°ΡŽ false ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠ» Π±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… file_name ΠΈ ival, Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΡΡ‚Π°Π²Π°Π»ΠΈΡΡŒ Π±Ρ‹ Π² области видимости ΠΈ ΠΊΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…. Однако эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ язык Π½Π΅ позволяСт ΠΏΠ΅Ρ€Π΅ΠΏΡ€Ρ‹Π³ΠΈΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ссли инициализированная пСрСмСнная находится Π² области видимости Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ случая case, Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это слСдуСт Π² Π±Π»ΠΎΠΊΠ΅, гарантируя Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрСмСнная Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· области видимости ΠΏΠ΅Ρ€Π΅Π΄ любой ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ.

case true:

 {

  // ok: ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ объявлСния Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°

  string file_name = get_file_name();

  // ...

 }

 break;

case false:

 if (file_name.empty()) // ошибка: file_name Π²Π½Π΅ области видимости

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 5.3.2

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.9. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΡΠ΅Ρ€ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² if для подсчСта количСства гласных Π±ΡƒΠΊΠ² Π² тСкстС, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠΌ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° cin.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.10. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° подсчСта гласных ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: ΠΎΠ½Π° Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π³Π»Π°Π²Π½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹ ΠΊΠ°ΠΊ гласныС. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая подсчитываСт гласныС Π±ΡƒΠΊΠ²Ρ‹ ΠΊΠ°ΠΊ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика aCnt Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ встрСчС ΠΊΠ°ΠΊ символа 'a', Ρ‚Π°ΠΊ ΠΈ символа 'A' (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… гласных Π±ΡƒΠΊΠ²).

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.11. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° подсчитывала Ρ‚Π°ΠΊΠΆΠ΅ количСство ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², символов табуляции ΠΈ Π½ΠΎΠ²ΠΎΠΉ строки.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.12. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° подсчитывала количСство встрСчСнных Π΄Π²ΡƒΡ…ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ: ff, fl ΠΈ fi.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.13. КаТдая ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ содСрТит Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ВыявитС ΠΈ ΠΈΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ….

Код для упраТнСния 5.13

(a) unsigned aCnt = 0, eCnt = 0, iouCnt = 0;

    char ch = next_text();

    switch (ch) {

    case 'a': aCnt++;

    case 'e': eCnt++;

    default: iouCnt++;

    }

(b) unsigned index = some_value();

    switch (index) {

    case 1:

     int ix = get_value();

     ivec[ix] = index;

     break;

    default:

     ix = ivec.size()-1;

     ivec[ix] = index;

(c) unsigned evenCnt = 0, oddCnt = 0;

    int digit = get_num() % 10;

    switch (digit) {

    case 1, 3, 5, 7, 9:

     oddcnt++;

     break;

    case 2, 4, 6, 8, 10:

     evencnt++;

     break;

    }

(d) unsigned ival=512, jval=1024, kval=4096;

    unsigned bufsize;

    unsigned swt = get_bufCnt();

    switch(swt) {

    case ival:

     bufsize = ival * sizeof (int);

     break;

    case jval:

     bufsize = jval * sizeof(int);

     break;