ورود

View Full Version : سوال در مورد دستور switch



amin.net
سه شنبه 21 مهر 1394, 10:49 صبح
سلام خدمت همگی.
ببخشید میخواستم بدونم با دستور switch فقط میشه مقادیری رو که برابر باشند چک کرد؟آیا نمیشه برای مقایسه بزرگتر یا کوچکتر استفاده کرد؟
مثلا فرض کنیم یه کد داریم مثل این:

int main()
{
int a;
printf("\nEnter a : ");
scanf("%d",&a);

//---------------------------------------------
if(a<10)
{
printf("\nIt's smaller than 10");
}
else if(a>10)
{
printf("\nIt's begger than 10");
}
else if(20<a<30)
{
printf("\nIt's between 20 and 30");
}
else
printf("\nNone of the conditions!");
//----------------------------------------------
getch();
return 0;
}
آیا نمیشه به جای نوشتن این همه if،از دستور switch استفاده کرد؟اگه نه،آیا دستوری وجود داره که از نوشتن اینهمه if جلوگیری کنه؟؟

hamedBB
سه شنبه 21 مهر 1394, 14:25 عصر
مسلما از دستور switch که نمی تونی استفاده کنی چون همونطور که گفتی switch فقط در حالت تساوی استفاده میشه و فقط هم مقادیر صحیح (integer) رو قبول می کنه.
درباره ی اینکه آیا راه ساده تری داره یا نه من خیلی بعید میدونم داشته باشه ولی توصیه می کنم این کار رو تحت یک تابع با یک اسم مناسب انجام بده و در برنامت از اون تابع رو فراخوانی کن. باعث بهتر شدن ساختار کدت میشه.

rahnema1
چهارشنبه 22 مهر 1394, 08:04 صبح
سلام
اونچه در برنامه نویسی مهمه در درجه اول اینه که قواعد او زبان را به خوبی یاد بگیرید و ثانیا برنامه لازمه کاملا خوانا و تمیز نوشته بشه
مثلا در زبان c چنین عبارتی اشتباهه:
20<a<30
به جای اون به صورت زیر بنویسید یعنی دو تا شرط را با هم and کنید
20 < a && a < 30
همون طور که دوستمون اشاره کردند تابعی برای این کار اختصاص بدید
بنابراین صرفا مختصر نوشتن بدون در نظر گفتن موراد دیگه مفید نیست مثلا می شه به صورت زیر نوشت و خوانایی چندانی نداره:

int a;
printf("\nEnter a : ");
scanf("%d", &a);
a < 10
? printf("\nIt's smaller than 10")
: 10 <= a && a < 20
? printf("\nIt's begger than 10")
: 20 <= a && a < 30
? printf("\nIt's between 20 and 30")
: printf("\nNone of the conditions!");

یا مثلا اینجوری:

printf("\n%s",
a < 10
? "It's smaller than 10"
: 10 <= a && a < 20
? "It's begger than 10"
: 20 <= a && a < 30
? "It's between 20 and 30"
: "None of the conditions!");

یا این یکی :

printf("\n%s",
a < 10
? "It's smaller than 10"
: a < 20
? "It's begger than 10"
: a < 30
? "It's between 20 and 30"
: "None of the conditions!");

Ananas
جمعه 01 آبان 1394, 23:56 عصر
این هم نظر بنده:

int GetRange(int x, int * r, int count)
{
for (int i = 0; i < count; i++)
if (x < (r[i])) return i;
return count;
}

int main()
{
int r[] = {10, 20, 30, 40};
switch (GetRange(0, r, sizeof(r)))
{
case 0:

break;
case 1:

break;
case 2:

break;
case 3:

break;
default:
;
}
/*
for (int i = 0; i < 100; i++)
{
cout << GetRange(i, r, sizeof(r)) << endl;
};
*/
getchar();
getchar();
return 0;
};

علیرضا.ا
یک شنبه 03 آبان 1394, 20:04 عصر
#include <iostream>

using namespace std;
char cmp(int x,int y)
{
return x > y ? '>' : '<';
}
int main()
{
int x,y;
cout << "Enter two number: ";
cin >> x >> y;
switch (cmp(x,y))
{
case '>':
cout << "second num is lower than first";
break;
case '<':
cout << "first num is lower than second";
break;
}
cin.get();
return 0;
}

Ananas
یک شنبه 03 آبان 1394, 23:58 عصر
#include <iostream>

using namespace std;
char cmp(int x,int y)
{
return x > y ? '>' : '<';
}
int main()
{
int x,y;
cout << "Enter two number: ";
cin >> x >> y;
switch (cmp(x,y))
{
case '>':
cout << "second num is lower than first";
break;
case '<':
cout << "first num is lower than second";
break;
}
cin.get();
return 0;
}
خب این روشی که نوشتید فقط دو حالت داره که با if و else معمولی هم جواب میده. switch لازم نداره!. ایشون میخاستن که چند تا رنج عددی داشته باشن. با روشی که نوشتم میتونن هر تعداد که بخان رنج عددی داشته باشن. من برای نمونه 4 تا گفتم. میشه بیست تا رنج عددی داشته باشن. مثلا:

#include <iostream.h>
using namespace std;
int GetRange(int x, int * r, int count)
{
for (int i = 0; i < count; i++)
if (x <= (r[i])) return i;
return count;
}

int main()
{
int r[] = {10, 20, 30, 40, 53, 61, 105, 200, 1024, 5550};
int x;
while (true)
{
cin >> x;
switch (GetRange(x, r, sizeof(r)))
{
case 0: // -inf .. 10
cout << "-inf .. 10";
break;
case 1: // 11 .. 20
cout << "11 .. 20";
break;
case 2: // 21 .. 30
cout << "21 .. 30";
break;
case 3: // 31 .. 40
cout << "31 .. 40";
break;
case 4: // 41 .. 53
cout << "41 .. 53";
break;
case 5: // 54 .. 61
cout << "54 .. 61";
break;
case 6: // 62 .. 105
cout << "62 .. 105";
break;
case 7: // 106 .. 200
cout << "106 .. 200";
break;
case 8: // 201 .. 1024
cout << "201 .. 1024";
break;
case 9: // 1025 .. 5550
cout << "1025 .. 5550";
break;
default: // 5551 .. +inf
cout << "5551 .. +inf";
};
cout << endl;
};

getchar();
getchar();
return 0;
};