این ساختار یا دستور موجب میگردد که گروه مشخصی از دستورها بین چندین گروه از دستورها انتخاب گردد. این انتخاب بستگی به مقدار فعلی یک عبارت خواهد داشت که در switch منظور شده است. قبلاً گفتیم که در دستور if-else، بر اثر وجود یا عدم وجود شرط (یا شرایطی)، یکی از دو مجموعه دستورها انتخاب و اجرا میگردد. به عبارت دیگر در اینجا حداکثر دو انشعاب یا دو شاخه وجود دارد که باید فقط بر اثر نتیجه بررسی شرط مورد نظر، یکی از آن دو شاخه یا مسیر انتخاب گردد. دستور switch این امکان را فراهم میسازد که از بین شاخههای متعدد (بیش از دو شاخه) فقط یکی انتخاب گردد که قانون انتخاب را نتیجه ارزیابی عبارت ذکر شده در switch تعیین میکند. بنابراین، این دستور اجازه چندین انشعاب میدهد.
شکل کلی ساختار switch به صورت زیر است.
switch(expression)
{
case exp1: statements 1
break ;
case exp2: statements 2
break ;
….
….
case exp n: statements n
break ;
default: statements
break ;
}
در دستور switch نتیجه عبارت یا expression که پس از کلمه کلیدی switch در داخل یک زوج پرانتز قرار دارد یک عدد صحیح خواهد بود. در ضمن expression ممکن است کاراکتر نیز باشد زیرا هر کاراکتر نیز مقدار صحیح همارزی دارد که کد اسکی آن کاراکتر است. statement معمولاً دستوری مرکب است. break برای خروج از دستور است.
نمودار ساختار switch در شکل ۵ـ۵ نشان داده شده است.
نحوه عملکرد ساختار switch بدین شکل است که وقتی این دستور اجرا میشود عبارت ذکر شده در switch محاسبه و ارزشیابی میشود. سپس نتیجه آن از بالا به پایین به ترتیب با مقدار ذکر شده در case یعنی exp 1 , exp 2 ,… , exp n مقایسه میشود. اگر نتیـجه مقایسه با هرکدام از مقادیر ذکر شده در case های مزبور برابر باشد، دستورهای ذکر شده در آن case اجرا میگردد و کنترل اجرای برنامه به اولین دستور پس از ساختار switch انتقال مییابد. چنانچه مقدار ذکر شده در switch با هیچ یک از مقادیر ذکر شده در caseهای متوالی یکسان نباشد، مجموعه دستورهای مربوط به default به عنوان پیشفرض اجرا میگردد.
نمودار ساختار switch
در دستور switch استفاده از حالت default دلخواه است. بنابراین چنانچه حالت default به کار برده نشود و مقدار عبارت switch در مقابله با مقادیر ذکر شده در caseهای متوالی مساوی (همسان) نباشد، دستور switch خاتمه مییابد و کنترل برنامه به اولین دستور بعد از switch انتقال مییابد.
یادآوری مهم. گفتیم، عبارت ذکر شده در switch فقط مقادیر صحیح یا کاراکتر را میپذیرد. بنابراین برخلاف دستور if نمیتوان در آن از عبارت رابطهای و منطقی استفاده کرد؛ به عبارت دیگر switch فقط تساوی را تست میکند، اما if عبارات رابطهای و منطقی را نیز ارزیابی میکند. نتیجهای که میتوان گرفت آن است که در حالت کلی نمیتوان دستور switch را حالت تعمیمیافته دستور if-else برای m انشعاب تصور کرد.
دستور switch برای پردازش فرامین صفحه کلید بسیار مناسب است و در واقع شکل تغییریافتهای از دستور if-else است.