Switch case - przejście przez każdy warunek.

0

Mam pewien dylemat. Moja funkcja (niekoniecznie w dzialajacej postaci, napisana na szybko, gdyz bede pisal program, w ktorym takie cos moze mi sie przydac):

switch(zmienna)
{
    case "zmienna_a":
    {
       printf("Przyklad a.\n");
    }
    break;
    case "zmienna_b":
    {
        printf("Przyklad b.\n");
    }
    break;
    default:
    {
       printf("Blad.\n");
    }
    break;
}
 

Funkcja switch bedzie czescia funkcji (zalozmy, ze nazywa sie funckja_przykladowa()), ktora bede wywolywal z kilkoma argumentami. Jak widac, po kazdym 'case' mam instrukcje przerywajaca 'break'. Chcialbym sie dowiedziec, czy jest mozliwosc, by moja funkcja_przykladowa() mogla przybrac dodatkowy argument (domyslny int 0, mozliwosc wywolania funkcji z argumentem 1), ktory bedzie sprawial, ze kazdy case zostanie wykonany? (Niezaleznie od wartosci zmiennej 'zmienna'). Wydaje mi sie, ze rozwiazaniem moze byc cos takiego (zaraz przed funkcja 'switch' dodam warunek):

if (dodatkowa_zmienna = 1)
{
    zmienna = "pomin_je";
]

switch(zmienna)
{
    case "pomin_je":
    {
        case "zmienna_a":
        case "zmienna_b":
    }
    break;
    
    case "zmienna_a":
    {
       printf("Przyklad a.\n");
    }
    break;
    case "zmienna_b":
    {
        printf("Przyklad b.\n");
    }
    break;
    default:
    {
       printf("Blad.\n");
    }
    break;
}  

Pytanie - czy takie rozwiazanie jest etyczne? (O ile w ogole przejdzie)

Nie jestem w stanie uzywac kompilatora (korzystam z tabletu na chwile obecna, komputer bede mial dopiero w weekend), wiec poki co w mojej glowie rodza sie tylko problemy i pomysly ich rozwiazania, bardzo bym prosil o wyrozumialosc i porade. :)

2
  1. case "zmienna_a": - nie da rady, przynajmniej C/C++ owszem w C++ da się obejść stosując hash funkcję raz w czasie kompilacji a raz w czasie działania ale odradzam tej zabawy.
  2. Zrób to po ludzku:
typedef void funkcja_case();
void funkcja_case_zmienna_a() { ... }
void funkcja_case_zmienna_b() { ... }
struct case_zmienna_ { const char *name; funkcja_case *fun; } case_tb[]=
  {
   {"zmienna_a",&funkcja_case_zmienna_a},
   {"zmienna_b",&funkcja_case_zmienna_b},
  };
...
for(int i=0;i<sizeof(case_tb)/sizeof(*case_tb);++i) if((dodatkowa_zmienna)||(!strcmp(case_tb[i],zmienna))) case_tb[i].fun();

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