PDA

View Full Version : مشکل در استفاده از switch ... case



rezakhbonab
یک شنبه 16 شهریور 1393, 21:56 عصر
سلام دوستان
من یه کدی شبیه نمونه کد زیر دارم:

if(.....)
{
switch(...)
{
case ...:
.
.
.
break;

case ...:
.
.
.
break;
.
.
.
}
}
else if(.....)
{
switch(...)
{
case ...:
.
.
.
break;

case ...:
.
.
.
break;
.
.
.
}
}
.
.
در حالت صحیح نباید مقادیر کیس های مربوط به هر سوئیچ در دیگری دخالت داشته باشند چون هرکدوم داخل {} جداگانه هستند
ولی نمیدونم چرا همه کیس های مربوط به هر کدام از سوئیچ ها در هم تاثیر گذار هستن همانند اینکه در {} ی اولین سوئیچ قرار داشته باشند که اینگونه نیست!
لطفا راهنمایی کنید
با تشکر

NASA's Spaceman
یک شنبه 16 شهریور 1393, 23:15 عصر
میشه منظورتون رو واضح تر بگی؟
منظورتون از دخالت کد ها چیه؟
با سپاس Spaceman

rezakhbonab
یک شنبه 16 شهریور 1393, 23:32 عصر
میشه منظورتون رو واضح تر بگی؟
منظورتون از دخالت کد ها چیه؟
با سپاس Spaceman

ینی کیس های مربوط با سوئیچ دوم از سویچ اول تبعیت میکنن
هر کدام از سوئیچ ها دارای مقادیر واحدی برای کیس ها هستند ولی ممکنه در همه سوئیچ ها چندین کیس تکراری وجود داشته باشه ک باعث میشه خطا بده که کیس های تکراری وجود داره!

NASA's Spaceman
یک شنبه 16 شهریور 1393, 23:46 عصر
اینجوری مشکلی ندارین و میتونین کارتون رو انجام بدین
int a = Convert.ToInt32(textBox2.Text); int b = Convert.ToInt32(textBox1.Text);
if (b == 1)
{
switch (b)
{
case 1:
MessageBox.Show("C#");
break;
}
}
if (a == 1)
{
switch (a)
{
case 1:
MessageBox.Show("Programming");
break;
}
}
ولی اگه کدتون رو میذاشتین راحت تر میشد کمکتون کرد که کجاش مشکل داره
با سپاس Spaceman

rezakhbonab
دوشنبه 17 شهریور 1393, 00:03 صبح
اینجوری مشکلی ندارین و میتونین کارتون رو انجام بدین
int a = Convert.ToInt32(textBox2.Text); int b = Convert.ToInt32(textBox1.Text);
if (b == 1)
{
switch (b)
{
case 1:
MessageBox.Show("C#‎");
break;
}
}
if (a == 1)
{
switch (a)
{
case 1:
MessageBox.Show("Programming");
break;
}
}
ولی اگه کدتون رو میذاشتین راحت تر میشد کمکتون کرد که کجاش مشکل داره
با سپاس Spaceman
من بیشتر از 1000 تا if دارم
ینی واسه هرکدوم یه متغیر تعریف کنم؟

rezakhbonab
دوشنبه 17 شهریور 1393, 00:08 صبح
اینم قسمتی از کد


else if (userControl11.comboCity.SelectedText.ToString() == "خدا آفرین")
{
switch (oldnum.Substring(0, 4))
{
case "5382":
newnum = 44642 + oldnum.Substring(4, 3);
txtNewNum.Text = newnum;
txtNewNum2.Text = 41 + newnum;
txtCityName.Text = "خدا آفرین";
txtCenterName.Text = "محمودآباد";
txtSectionName.Text = "مرکزی";
break;
case "5383":
newnum = 44643 + oldnum.Substring(4, 3);
txtNewNum.Text = newnum;
txtNewNum2.Text = 41 + newnum;
txtCityName.Text = "خدا آفرین";
txtCenterName.Text = "محمودآباد";
txtSectionName.Text = "مرکزی";
break;
}
}


else if (userControl11.comboCity.SelectedText.ToString() == "سراب")
{
switch (oldnum.Substring(0, 4))
{
case "4494":
newnum = 44646 + oldnum.Substring(4, 3);
txtNewNum.Text = newnum;
txtNewNum2.Text = 41 + newnum;
txtCityName.Text = "خدا آفرین";
txtCenterName.Text = "قشلاق ازبك";
txtSectionName.Text = "مرکزی";
break;
case "5383":
newnum = 44650 + oldnum.Substring(4, 3);
txtNewNum.Text = newnum;
txtNewNum2.Text = 41 + newnum;
txtCityName.Text = "خدا آفرین";
txtCenterName.Text = "حيدركانلو";
txtSectionName.Text = "مرکزی";
break;
}

}

مشکل تو کیس 5383 هستش که تو هردو سوئیچ وجود داره
البته خیلی از این کیس ها تو کدم موجوده ک تکراریه

aminmousavi
دوشنبه 17 شهریور 1393, 01:12 صبح
من بیشتر از 1000 تا if دارم
ینی واسه هرکدوم یه متغیر تعریف کنم؟


سلام دوست عزیز .
به نظرم یکم منطق برنامه اتون غلطه ! مخصوص با این کدی که گذاشتید

به هر حال من منظورتون رو کامل متوجه نشدم تو پست 3 گفتین خطا میگیره که دوتا Case از این وجود داره ، اگر منظورتون اینه که نمیزاره کامپایل کنید ، من کد بالا رو امتحان کردن مشکلی نداشت ، کامپایل هم شد .
اگر لطف کنید دقیق تر مشکلتون رو بگید ، بهتر میشه کمکتون کرد

mohsen12345
دوشنبه 17 شهریور 1393, 09:03 صبح
حدس من اینه که باگ منطقی دارین ، کدتون رو بذارین تا بیشتر بشه راهنمایی کرد
با این چند خط نمیشه فهمید کجا باگ منطقی داره
یه راه دیگه هم برای فهمیدن باگ منطقیتون اینه که Breakpoint توی جاهایی که با این متغییر ها سر کار دارن بذارید و توی هر اجرا با F11 مقدار های همین متغییر هایی که برای IF و Switch استفاده می شه رو چک کنید

rezakhbonab
دوشنبه 17 شهریور 1393, 21:53 عصر
سلام دوست عزیز .
به نظرم یکم منطق برنامه اتون غلطه ! مخصوص با این کدی که گذاشتید

به هر حال من منظورتون رو کامل متوجه نشدم تو پست 3 گفتین خطا میگیره که دوتا Case از این وجود داره ، اگر منظورتون اینه که نمیزاره کامپایل کنید ، من کد بالا رو امتحان کردن مشکلی نداشت ، کامپایل هم شد .
اگر لطف کنید دقیق تر مشکلتون رو بگید ، بهتر میشه کمکتون کرد
بله دوست عزیزاجازه کامپایل نمیده! میگه که کیس های تکراری داره

Mahmoud.Afrad
پنج شنبه 20 شهریور 1393, 16:05 عصر
اگر 1000 خط کد شما همین مقایسه ها هست میتونم با قاطعیت بگم منطق اشتباهی رو انتخاب کردی.

میتونی این نیاز رو با دیتابیس های سبک و یا حتی فایل(مانند فایل xml) بر طرف کنی. در این حالت به جای 1000 خط کارت شاید با کمتر از 10 خط هم راه بیفته.

rezakhbonab
یک شنبه 23 شهریور 1393, 21:57 عصر
اگر 1000 خط کد شما همین مقایسه ها هست میتونم با قاطعیت بگم منطق اشتباهی رو انتخاب کردی.

میتونی این نیاز رو با دیتابیس های سبک و یا حتی فایل(مانند فایل xml) بر طرف کنی. در این حالت به جای 1000 خط کارت شاید با کمتر از 10 خط هم راه بیفته.

عزیز من تازه کارم
اگه با نمونه کدهای ساده راهنماییم کنید ممنون میشم
نزدیک 20000 خط کد دارم که همش همین شکلی مقایسه هستش

Mahmoud.Afrad
پنج شنبه 27 شهریور 1393, 16:20 عصر
ابتدا داده های مورد استفاده رو مشخص کنید. کمبو با چی پر میشه. تکست باکس ها با چه منطقی پر میسن و ...
روند برنامت رو توضیح بده.
آموزش استفاده از فایل و دیتابیس به وفور در همین سایت وجود داره که میتونی استفاده کنی.