انتخابهاي چند گانه :
در برر سي حالتهاي مختلف در شرط مقابل دستور case اجباري نيست كه فقط يك حالت را بررسي كنيد، بلكه ميتوانيد چند حالترا در مقابل يك case بررسي كنيد، تا در صورتي كه هر كدام از آنها رخ داد، كد مورد نظر اجرا شود . در بخش امتحان كنيد زيـر،برنامه بالا را به گونه اي تغيير مي دهيم كه با انتخاب نام از ListBox، جنسيت فرد انتخاب شده را نمايش دهد .
)1 محـيط ويرايـشگر كـد را بـراي Form1 بـاز كنيـد و تغيـرات مـشخص شـده در زيـر را در متـد مربـوط بـه رويـدادSelectedIndexChanged اعمال كنيد :
private void lstData_SelectedIndexChanged(object sender,
EventArgs e)
{
// Declare variables
string strName;
// Get the selected name
strName =
lstData.Items[lstData.SelectedIndex].ToString();
// Use a Switch to display a person’s gender
switch (strName.ToLower())
{
case “bryan”:
case “edward”:
MessageBox.Show(“Male”, “Switch Demo”);
break;
case “stephanie”:
case “cathy”:
case “betty”:
MessageBox.Show(“Female”, “Switch Demo”);
break;
}
}
)2 برنامه را اجرا كنيد و روي يكي از اسامي داخل ListBox كليك كنيد . مشاهده مي كنيد كه كادر پيغامي نمايش دادهمي شود و جنسيت فرد انتخاب شده را نمايش مي دهد ( شكل -15.( 4
15 4- شكل
كد مربوط به دريافت نام و مقدار دهي اوليه به متغيير براي استفا ده در switch، همانند قبل است و تفاوتي ندارد. اگـر بخـواهيمبراي چند شرط مختلف يك كد اجرا شود، بايد براي هر شرط يك بار دستور case را بنويسيم، با اين تفاوت كه فقط بـراي مـوردآخر، كد و دستور break را مي نويسيم . در بقيه دستورات case، فقط شرط مورد نظر را وارد مي كنيم. اين مورد موجـب مـيشود كه اين شرط ها همانند استفاده از عملگر Or در دستور if با يكديگر تركيب شوند . بنابراين هر كدام از آنها كه درست باشـد،كدي كه بعد از آخرين دستور case آمده است اجرا مي شود . براي مثال در مـورد اول، اگـر اسـم انتخـاب شـده bryan و يـاedward باشد، كدهاي بعد از دو دستور case اجرا مي شوند .
case “bryan”:
case “edward”:
strFavoriteColor = “Madras Yellow”;
break ;
دقت داشته باشيد كه با اين روش، در حقيقت در حال تركيب اين شرطها با عملگر “يا” هستيد و مي گوييد “يا اين مورد يا آن مورد”نه اينكه “اين مورد و آن مورد” .
دستور default :
تاكنون مشاهده كرديم كه چگونه شرطهاي مختلف را در دستور switch بررسي كنيم. اما سوال اين است كه اگـر هـيچ يـك ازاين شرط ها اجرا نشدند چه مي شود؟ اين مورد كه هيچ يك از شرط ها اجرا نشوند را در بخش قبلي، هنگامي كـه در حـال بررسـيمقايسه با حساسيت به نوع حروف بوديم مشاهده كرديم . اما چگونه مي شود كدي را به نحوي مشخص كرد كه هر گاه هـيچ يـك ازشرط ها برقرار نبودند اجرا شود؟ در بخش امتحان كنيد بعد، اين مورد را بررسي خواهيم كرد .
)1 قسمت طراحي فرم را برا ي Form1 باز كنيد و كنترل ListBox را از روي فرم انتخاب كنيـد . سـپس بـه پنجـرهProperties برويـد و بـا اسـتفاده از خاصـيت Items، پنجـره String Collection Editor را مجددا باز كنيد. نام ديگري به ليست اضافه كنيد و روي دكمه OK كليك كنيد .
)2 در متد lstData_SelectedIndexChanged بخش مربوط به دستور switch را بـه صـورتزير تغيير دهيد:
switch(strName.ToLower())
{
case “bryan”:
case “edward”:
MessageBox.Show(“Male”, “Switch Demo”);
break;
case “stephanie”:
case “cathy”:
case “betty”:
MessageBox.Show(“Female”, “Switch Demo”);
break;
default:
MessageBox.Show(“I don’t know this person’s
” + “gender.”, “Select Demo”);
break;
}
)3 برنامه را اجرا كنيد و از ListBox نامي كه جديداً به برنامه ليست اضافه شده است را انتخاب كنيد . نتيجه اي مـشابهشكل -16 4 مشاهده خواهيد كرد .
16 4- شكل
دستوراتي كه بعد از بخش default وارد مي شوند، هنگامي اجرا مي شوند كه هيچ يك از شرايطي كه در بخش case قيـدشده است برابر با مقدار متغيير نباشد . براي مثال در برنامه بالا هيچ دستور case براي عبارت “Sydney” وارد نـشده اسـت،بنابراين دستورات بخش default اجرا مي شوند و كادر پيغامي نمايش داده مي شود كه مي گوييد جنسيت فرد انتخـاب شـدهمشخص نيست .
نكته: دقت داشته باشيد كه همواره در انتهاي دستورات بخش case و يـا بخـش default از دسـتور break اسـتفادهكنيد تا بعد از اجراي كد كنترل بر نامه به خط بعد از دستور switch برگردد. در غير اين صورت با خطاي زمـان كامپايـل مواجـهخواهيد شد .
استفاده از نوع هاي داده اي گوناگون در دستور switch :
در اين درس، فقط از متغيير هاي رشته اي در دستور switch استفاده كرديد . اما مي توانيد اين دستور را بـا انـواع متغي يـر هـايموجود در #C همانند اعداد صحيح (int)، اعـداد اعـشاري (double و float) و يـا متغييـر هـاي Boolean هـماستفاده كنيد .
هر نوع متغييري كه بتواند در دستور if با استفاده از عملگر == بررسي شود، ميتواند در دستور switch نيـز بـه كـار رود . امـامعمولا از متغيير هايي كه داراي مقادير پيوسته هستند مانند متغيير هـاي رشـته اي و يـا اعـداد صـحيح بـراي دسـتور switchاستفاده ميكنند . زيرا اعداد اعشاري مي توانند مقدارهاي كسري مانند ، 2,221 ،2,21 2,2 و … را داشته باشد و استفاده از آنها در دستورswitch منطقي نيست .
حلقه ها :
هنگامي كه در حال نوشتن يك برنامه كامپيوتري هستيد، ممكن است بخواهيد يك عمل مشخص را چندين بار متوالي انجام دهيد تانتيجه مطلوب خود را دريافت كنيد . مثلا ممكن است بخواهيد صورت حساب تلفن را براي تمام مشتركين بدست آوريد و يا 10 فايـلرا از روي كامپيوتر بخوانيد .
در برنامه نويسي ، براي انجام اين امور معمولا از حلقه ها استفاده مي شود . در اين بخش با سه دسـته كلـي از حلقـه هـا كـه در #Cوجود دارند آشنا خواهيم شد .
- حلقه هاي for – اين حلقه ها معمولا به تعداد مرتبه مشخصي اجرا مي شوند (براي مثال، دقيقا 10 بار).
- حلقه هاي while – اين حلقه ها معمولا تا هنگامي كه نتيجه يك شرط درست شود ادامه پيدا مي كنند.
- حلقه هاي do – عملكرد اين حلقه ها نيز همانند حلقه هاي while است، با اين تفـاوت كـه شـرط در حلقـه هـاي
- while در ابتدا بررسي مي شود ولي در اين حلقه ها، شرط در انتها بررسي ميشود.