دستور switch : در این دستور ما میتوانیم با توجه به مقادیر مختلف یک متغیر، کارهای مختلفی را انجام دهیم و به عبارت دیگر، این دستور با توجه به خواسته کاربر عمل کرده و کدهای درخواستی را اجرا میکند؛ حالت کلی دستور switch به این صورت است:
switch (x)
{
case 1: دستور اول
break;
case 2: دستور دوم
break;
.
.
.
default: دستور پیش فرض
break;
}
برای فهم بهتر این دستور به برنامه زیر توجه کنید؛ این برنامه دو عدد را از کاربر گرفته و با توجه به کار درخواستی کاربر، عملیات را روی اعداد انجام میدهد: (البته این برنامه را با استفا ه از دستور do…while در ادامه کامل میکنیم)
همان طور که مشاهده میکنید، تنها قسمت جدید این کد دستور switch و بندهاش است که به توضیح آن میپردازم:
برخلاف بقیه دستورهای کنترلی (که در ادامه خواهید دید)، دستور switch دارای شرطی نیست و فقط یک متغیر را به عنوان ورودی میپذیرد و تمام تغییرات بر مبنای آن متغیر صورت میگیرد؛ در این برنامه ما میخواستیم بر خلاف برنامههای قبل که فقط توانایی انجام یک کار را داشتند (مثلا فقط اعداد را جمع میکردند) امکان انجام چند کار را بر حسب نیاز کاربر، به برنامه بدهیم؛ در این برنامه پس از این که کاربر عملیات خود را در برنامه وارد کرد، برنامه پس از تشخیص اینکه متغیر operation دارای چه مقداری است دستورهای مختلفی را انجام میدهد، که تمام این دستورات درون بدنه دستور switch نوشته میشود؛ برای درک بهتر این برنامه، کار کامپایل برنامه را از بالا تا پایین توضیح میدهم:
کامپایلر وارد بدنهی اصلی میشود، متغیرهای number1 ،number2 و operation (که از نوع کاراکتر است) تعریف میشوند، سپس پیام اول نمایش داده میشود، عدد اول، عملگر دلخواه کاربر و در آخر عدد دوم از کاربر گرفته میشود، خب رسیدیم سر اصل مطلب! دستور switch؛ ابتدا به این دستور میفهمانیم که با متغیر operation باید کارش را انجام دهد! در قسمت اول کنترل میشود که آیا کاراکتر عملگر، + است؟ اگر پاسخ بله است، پس دستور مقابل آن انجام میشود، و به علت وجود دستور break (در نکات تکمیلی درباره این دستور توضیح خواهم داد) از بدنهی دستور switch خارج میشود؛ و اگر پاسخ خیر است، کامپایلر به سراغ دستور دوم که وجود کاراکتر – را کنترل میکند، میرود و به همین ترتیب این کار انجام میشود تا دستور مورد نیاز کاربر انتحاب شود و دستور مقابل آن انجام شود؛ اگر دقت کنید! میبینید که در انتهای بدنه دستور switch دستور default وجود دارد که تعیین میکند اگر هیچ کدام از دستورهای بالا انجام نشود چه اتفاقی بیفتد، که من در اینجا با نوشتن یک پیام ساده این کار را انجام دادم! در هر حال ننوشتن این دستور در انتهای برنامه خللی در انجام کارهای دستور switch ایجاد نمیکند، به همین دلیل میتوانید آن را ننویسید.
دستور while: با استفاده از این دستور میتوان کار(ها)یی را تا وقتی که شرط داخل پرانتز آن درست باشد به صورت مکرر انجام داد؛ در صورت نادرست بودن شرط، کامپایلر از بدنه خارج شده و به کامپایل کردن دستورهای بعد از بدنه میپردازد؛ همچنین صورت کلی این دستور نیز به این صورت است:
while (شرط)
{
دستور(ها)
}
این دستور تا وقتی که شرط داخل پرانتز درست باشد به صورت مکرر دستور(ها)ی داخل بدنه را انجام دهد، به همین دلیل معمولا (نه همیشه) دستوری داخل یا خارج بدنه وجود دارد که به عنوان شمارنده (در نکات تکمیلی در این باره توضیح خواهم داد) عمل میکند و باعث به وجود آمدن تکرار میشود؛ در کد زیر کاربرد این دستور را توضیح میدهم:
در این برنامه مجوع اعداد 1 تا x را انجام میشود، تا وقتی که حاصل مجموع کمتر از عدد 1000 شود و عدد x را به ما نمایش میدهد؛ به عبارت دیگر وقتی کامپایلر به شرط دستور while میرشد کنترل میکند که مقدار متغیر sum کمتر از عدد 1000 است یا خیر، اگر کمتر باشد وارد بدنه دستور while میشود و مقدار متغیر sum را با مقدار متغیر x به اضافه یک واحد، جمع میکند، [توضیح درباره خط 13: این خط با این عبارت ریاضی یکسان است]:
sum = sum + (x++)
سپس این کار را آنقدر انجام میدهد تا زمانی که مقدار متغیر sum بیشتر یا مساوی عدد 1000 شود، در این صورت کامپایلر دستورهای بعد از بدنه را که نمایش عدد x است، اجرا میکند.
دستور do…while: این دستور همانند دستور while است، با این تفاوت که دستور(ها) در بدنه قسمت do نوشته میشوند و بعد شرط while کنترل میشود، به عبارت دیگر تنها تفاوت این دستور با while این است که در do…while دستور(ها) حتما یک بار اجرا میشوند و اجرای بعدی آنها توسط شرط while کنترل میشود، در برنامه زیر کاربرد do…while را توضیح میدهم: این برنامه، کاملشده برنامه قبل است که توضیح داده بودم که آن را با دستور do…while کامل میکنم:
اگر این برنامه را با برنامه قبل مقایسه کنید، میبینید که تنها تفاوت این است که دستور while به انتهای بدنه، منتقل شده است، تفاوت کار این برنامه، با برنامه قبل این است که در این برنامه کاربر تا وقتی که کاراکتر n را وارد نکند، برنامه به کامپایل دوباره دستوهای بدنه do میپردازد؛ به عبارت دیگر کاربر با یک بار اجرا کردن این برنامه میتواند، چند بار عملیات مختلف را انجام دهد، در صورتی که در برنامه قبل امکان انجام عملیات مختلف وجود نداشت؛ برای فهم بهتر به توضیح کامپایل برنامه میپردازم:
ابتدا کامپایلر، وقتی به دستور do میرسد، تمام دستورها را اجرا میکند، یعنی ابتدا به نمایش پیامها و سپس گرفتن عملیات میپردازد و سپس به دستور switch میرسد و با توجه به مقدار متغیر مورد نظر به اجرای دستورات میپردازد و سپس پیغامی را مبنی بر اینکه آیا کاربر مایل به اجرای دوباره این کار هست یا خیر؟ نمایش میدهد و سپس پاسخ را با استفاده از کاراکترهای y و n که نمایانگر بله و خیر هستند، از کاربر دریافت میکند و سپس با استفاده از دستور while و شرط آن، اجرای دوباره دستورات کمترل میشود، یعنی اگر کاربر کاراکتر n را تایپ کرده و کلید اینتر را بزند، برنامه بسته میشود.
نکات تکمیلی
دستور break: وقتی این دستور در جایی از بدنه دستورهای تکرار و همین طور دستور switch نوشته میشود، باعث میشود، اجرای ادامه کدهای داخل بدنه متوقف شود و کامپایلر از بدنه خارج شود؛ به عنوان مثال در دستور switch، بعد از هر مورد دستور break نوشته میشود تا بعد از اجرای دستور هر مورد، کامپایلر از بدنه خارج شود و به کامپایل کدهای بعد از بدنه بپردازد؛ به عبارت دیگر اگر در دستور switch بعد از هر مورد، دستور break نوشته نشود، تمام موارد دستور switch اجرا میشود،(برای فهم بهتر ، دستورهای break را پاک کنید و به نتیجه برنامه دقت کنید.)
همیشه در بدنهی دستورهای تکرار، دستوری قرار دهید تا در نهایت شرط while اجرا شود (به عبارت دیگر بالاخره در بدنه دستوری وجود داشته باشد که باعث خاتمه حلقه شود)، در غیر این صورت باعث به وجود آمدن حلقه بی پایان (infinite loop) میشود.
موضوع قسمت بعدی: دستور کنترلی for
توجه: اگر برای اولین بار است که این مقاله را میخوانید و هنوز قسمتهای قبلی آن را مطالعه نکردهاید، نگران نباشید زیرا از لینکهای زیر میتوانید چهار قسمت قبلی را در اختیار داشته باشید: