عبارة switch في C++

عبارة switch

إذا كانت لديك شجرة قرارات كبيرة , وكلها تعتمد علي قيم مختلفة لنفس المتغير , فإن صيغة العبارة switch تكون أكثر ملاءمة . وإليك برنامجا يخرج لك عبارة من عدة عبارات , بحسب الرقم الذي تختاره من بين عدة أرقام .

Platters.cpp

Platters.cpp




 




// platters.cpp




// demonstrates SWITCH statement




#include <iostream.h>




 




void main()




   {




   int speed;                        // turntable speed




 




   cout << "\nEnter 33, 45, or 78: ";




   cin >> speed;                     // user enters speed




   switch(speed)                     // selection based on speed




      {




      case 33:                       // user entered 33




     cout << "LP album\n";




     break:




      case 45:                       // user entered 45




     cout << "Single selection\n";




     break;




      case 78:                       // user entered 78




     cout << "Obsolete format\n";




     break;




      }




   }






] قد تبدو العبارات المستخدمة في المثال بلا معني , والسبب أنها تسمية نوعيات أسطوانات الأغاني بحسب سرعاتها . طبقا للغة الأمريكية الدارجة , والمهم في الأمر هو الفكرة وللقارئ أن يعدل في هذه العبارات كما يتراءي له [



لدينا في هذا المثال متغيرا speed يمكن أن يأخذ أحد ثلاث قيم : 78 ,45 ,33 بحسب اختيار المستخدم , ومع كل اختيار , ستخرج عبارة معينة . وعلي ذلك فالعبارة :



Switch (speed)



تعني أن المتغير speed قابل للتبديل ] كلمة switch تعني تبديل [ بين قيم مختلفة . وتستخدم الكلمة الحاكمة case لبيان شرط بنتيجته , ] بمعني أنه في حالة الاختيار كذا , ستكون النتيجة كذا [ فالعبارات :



Case 33:



Cout << ''LP album'';



تعني أنه في حالة اختيارك للرقم 33 سوف تخرج لك الجملة المبينة . وبديهي أن نوع المتغير يجب أن يكون موفقا لنوع القيم التي يتبدل بينها . ويبين الشكل صياغة العبارة switch .



Object-Oriented Programming in C   _Page_0134_Image_0001



شكل صياغة العبارة switch





الكلمة الحاكمة break



بعد كل اختيار , توضع الكلمة الحاكمة break , وهي تدفع بالبرنامج للخروج من مجموعة الخيارات إلي خارجها , أي إلي أول سطر بعد القوس الحلزوني المحدد للكتلة الخاصة بها , وهو في برنامجنا هذا نهاية البرنامج . فمعني ذلك أنه بعد تنفيذ الخيار المطلوب ينتهي عمل مجموعة الخيارات , ويسير البرنامج بعد ذلك في طريقه . فإذا ما حدث ونسيت هذه الكلمة , ستجد أنك بعد تنفيذ خيارك , دخلت في الخيار التالي تلقائيا , ويسير البرنامج في غير الطريق الذي رسم له .



ما الذي يحدث إذا لم يوافق خيارك أيا من الخيارات السابقة ؟ في برنامجنا سوف يخرج البرنامج من مجموعة الخيارات , أي من كتلة العبارة switch بأكملها . ولكن هناك احتمال أخر , أن يحدد المبرمج للبرنامج خيارا ينفذه , ومن المتعارف عليه أن يسمي الخيار في هذه الحالة default وهو ما يعني أنه الخيار المبدئي الذي ينفذ في حالة عدم استخدام المستخدم لخيار أخر . وإليك برنامجا يستخدم هذه الفكرة , وهو يعيد صياغة برنامج لعبة المغامرات بأسلوب عبارة الخيارات switch .



Adswitch.cpp






adswitch.cpp


 


// adswitch.cpp


// demonstrates SWITCH with adventure program


#include <iostream.h>


#include <conio.h>      // for getche()


 


void main()


   {


   char ucs='a';


   int x=10, y=10;


 


   while( ucs != '\r' )


      {


      cout << "\nYour location is " << x << ", " << y;


      cout << "\nEnter direction (n, s, e, w): ";


      ucs = getche();                           // get character


      switch(ucs)                               // switch on it


     {


     case 'n':  y--; break;                 // go north


     case 's':  y++; break;                 // go south


     case 'e':  x++; break;                 // go east


     case 'w':  x--; break;                 // go west


     case '\r': cout << "Exiting\n"; break; // Enter key


     default:   cout << "Try again\n";      // unknown char


     }  // end switch


      }  // end while


   }  // end main


ومتغير العبارة


switch هنا من النوع المحرفي . كما تلاحظ أن الكلمة break وضعت في نفس سطر عبارة الشرط case , وكما كررنا , لا يهتم المترجم بذلك , فالمسألة هي تنسيق البرنامج بحسب ذوق المبرمج .



ويحتوي البرنامج علي خيار إضافي مع خيارات الاتجاهات , وهو خيار الضرب علي مفتاح الإدخال , وعنده يطبع البرنامج كلمة exiting قبل خروجه , وهو المنفذ بالعبارة :



Cade '\r' : cout << ''exiting'':break;



وأخيرا ؛ يحتوي البرنامج علي الخيار المبدئي هنا يطبع رسالة للمستخدم أن يعيد المحاولة . وهي تبين المضمون من استخدام هذه الوسيلة , فكثيرا ما تستخدم لطباعة رسالة لتبينه المستخدم للخطأ الذي وقع فيه اختياره مثلا :



Default: cout << ''error, incorrect input to switch '';



الاختيار بين الصيغتين switch وif..else



حينما يكون متوقعا علي قيمة متغير بعينه , فإن العبارة switch تكون هي المناسبة . أما العبارة if…else فتتيح خيارات بين متغيرات مختلفة . ومن جهة أخري فالعبارة switch لا تقبل متغيرات النوع flot .



وعلي ذلك , فيمكن اعتبار العبارة switch صيغة مبسطة للخيارات , يجدر استخدامها كلما أمكن ذلك , لوضوحها وجمال تنسيقها .



Object-Oriented Programming in C   _Page_0135_Image_0001

التسميات: