Олдинги мавзуларда биз if ва if/else операторлари билан танишган эдик. Лекин айрим масалаларни ечишда if оператори ичида кўп сондаги if операторларини қўллашга тўғри келади. Бу эса дастурни ёзишни ҳам, уни тушинишни ҳам мураккаблаштириб юборади. Бундай муаммони ечиш учун С++ тилида switch оператори қўлланилади. Бу операторнинг if операторидан асосий фарқи шуки, унда бир йўла бир нечта шарт текширилади. Натижада дастурни тармоқланиши нисбатан самаралироқ бўлади. switchоператорининг синтаксиси қуйидагичадир.
switch(ифода)
{
case Биринчи киймат: оператор;
break;
case Иккинчи киймат: оператор;
break;
.....
case N нчи киймат: оператор;
break;
defаult: оператор;
}
switch операторидан кейинги қавс ичида тилнинг конструкцияси нуқтаи–назаридан тўғри бўлган ихтиёрий ифодани ишлатиш мумкин. Оператор идентификатори ўрнида ҳам ихтиёрий оператор ёки ифода, ҳамда оператор ва ифодаларнинг кетма-кетлигини ишлатиш мумкин. Лекин бу ерда мантиқий операциялар ёки таққослаш ифодаларини ишлатиш мумкин эмас.
switch операторининг қўлланилиши.
switchоператорининг қўлланилиш синтаксиси қуйидагича:
switch(ифода)
{
сase 1-нчи қиймат: ифода;
сase 2-нчи қиймат: ифода;
…
сase n-нчи қиймат: ифода;
default : ифода;
}
switch оператори орқали дастурнинг тармоқланиши бир неча мумкин бўлган қийматларни қайтарувчи ифоданинг натижаси асосида ташкил этилади. switch операторидаги қавс ичида берилган ифоданинг қайтарган қиймати case операторидан кейинда кўрсатилган қиймат билан солиштирилади. Ифоданинг қиймати билан case операторидан кейинги қиймат мос келса танланган case операторидан кейинги барча сатрлар бажарилади. Бунда амалларни бажарилиши break операторигача давом этади.
Агарда case операторлари қийматидан бирортаси ҳам қайтарилган қийматга мос келмаса default операторидан кейинги дастур сатрлари бажарилади. Агарда бу оператор мавжуд бўлмаса бошқарув switch блоки танасидан чиқади ва кейинги дастур сатрларига берилади.
1-мисол.
switch(choice)
{
case 0:
cout<< “zero!”<< endl;
break;
case 1:
cout<< “оne!”<< endl;
breаk;
case 2:
cout<< “two! <break;
default:
cout<< “default!<}
2-мисол
switch (choice)
{
сase 0:
case 1:
case 2:
cout< “Less than 3!”<< endl;
break;
case 3:
cout<< Equals 3!” << endl;
break;
default:
cout<< Greater than3 ! ” << endl;}
Оператор ёки ифодалардан кейин break оператори қўлланилмаса жорий caseоператоридан кейинги case блокидаги барча ифодалар бажарилади. Кўп ҳолларда бундай ситуацияда хатолик рўй беради. Шунинг учун, breakоператорини тушириб қолдирсангиз бу амални тавсифловчи мос изоҳни(коментарийни) ёзишни унутманг.
switch операторининг қўлланилишига мисол 7.16.-листингда келтирилган.
7.16. – листинг. switch операторининг қўлланилиши include int main()
{
unsigned short int number;
cout<< “Enter a number between 1 and 5:”
сin>> number;
switch (number)
{
case 0: cout << “Small”;
break;
case 5: cout<< “Good job! \n”;
case 4: cout << “Nice Pick!\n” ;
case 3: cout<< “Excellent! \n”;
case 2: cout << “Master full! \n”
case 1: cout << Incredible!\n”;
break;
default: cout << “Big! \n”;
break;
}
cout<< “\n\n”;
return 0;
}
HАТИЖА:
Enter a number between 1 and 5: 3
Excellent!
Masterful!
Ineredible!
Enter a number between 1 and 5: 8
Big!
ТАҲЛИЛ
Дастур олдин сон киритишни сўрайди. Кейин эса киритилган сон switchоператори орқали текширилади. Агарда 0 киритилган бўлса унга мувофиқ равишда экранга 9 – сатрда ёзилган kichik sonхабари чиқарилади. Ва ундан кейин ёзилган breakоператори switchконструкциясини бажарилишини якунлайди. Агарда 5 сони киритилса бошқарув 11 – сатрга берилади ва унга мувофиқ хабар чиқарилади. Ундан кейинги токи breakсўзигача барча сатрлар кетма – кет бажарилади.
Агарда дастурга 5 дан катта сон киритилса 17 – сатрдаги default бажарилади, яъни экранга Big хабари чиқарилади.