jak zmniejszyc ilosc case w switch

0

Witam, mój problem kształtuje się następująco :
by chcemy by funkcj switch wykonywała te same instrukcje dla kilku parametrów stosujemy

switch(a) {
  case 1:
  case 2:
  case 3: instrukcja; break;
}

a gdy tych parametrów jest np. 50 (od 1 - 50) to co trzeba zrobic??

0

jeśli są to kolejne wartości, to możesz tak:

switch(a>=1 && a<=50){
case 1:instrukcja gdy warunek jest ok; break;
case 0: gdy warunek nie jest spełniony; break;
}
0

To jest źle przy założeniu, że ma być wykonywana instrukcja dla a=1, a=2, a=3... a=50. Bo co będzie dla a=1.5? No chyba że a jest całkowite.

Ja bym zrobił tak:

for(int i=1;i<51;i++)
{
   switch(a==i)
    {
      case 1:
         /*Spelnione*/
         break;
      case 0:
          /*Nie spełnione*/
    }    break;
}

Ale dla tylko 2 warunków nie potrzeba switch, wystarczy if...else.

0

Dobrze ale jak mam wykonać funkcje dla różnych przedziałów liczbowych np od 48 -57 jedna instrukcja, dla 98-122 druga instrukcj??

0

A ile masz tych przydziałów i zestawów instrukcji? Ile masz przypadków z konkretnymi wartościami (nie przedziałami; czyli że robisz coś np. tylko dla 58, a nie dla 55-65)? Może switch nie jest właściwą konstrukcją? Do sprawdzania przedziałów lepiej sprawdzają się instrukcje warunkowe if-else. Użycie switcha nie ma najmniejszego sensu, gdy masz powiedzmy trzy przedziały.

Jeśli natomiast masz kilka wartości punktowych i 2-3 przedziały, to możesz użyć switcha z etykietą default. Wartości punktowe obsługujesz case'ami, a przedziały sprawdzasz if-ami w default. O tak:

switch (a) {
case 1:
  zrob_cos();
  break;
case 2:
  zrob_cos_innego();
  break;
/* ... */
default:
  if (a >= 48 && a <= 57) {
    obsluz_przedzial_pierwszy();
  } else if (a >= 98 && a <= 122) {
    obsluz_przedzial_drugi();
  /* ... */
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1