Téma: [vyřešeno] Vnitřní switch
Mám problémy s vnořeným switchem (v bloku case). Zdá se, že v případě, že se hodnoty vnějšího a vnitřního switche shodují (stejný case ve vnějším i vnitřním switchi), jsou zpracovány příkazy obou case pro vnější smyčku. Uvedu to na příkladu, ať je to pochopitelné:
void main(void)
{
int status = 0;
int cmd = 1;
switch (status)
{
case 0:
printf ("Status 0n");
break;
case 100:
printf ("Status 100n");
switch (cmd)
{
case 0:
printf("cmd 0n");
break;
default:
printf("default cmdn");
break;
}
break;
case 101:
printf("status 101n");
break;
case 102:
printf("status 102n");
break;
default:
printf("default statusn");
break;
}
}
Na ladicím výpisu se zobrazí:
Status 0
cmd 0
To je samozřejmě špatně, protože program vleze i do vnitřního case 0. Pro status=300 je výsledek ještě podivnější. Možná by stačilo nějaké uzávorkování, ale přiznám se, že nevím jak.
Mohl bych si také nadefinovat hodnoty tak, aby se ve vnitřní a vnější smyčce nepřekrývaly, ale to bych musel udělat plný výčet, protože na default to taky zlobí. V nejhorším případě budu muset vnitřní smyčku napsat jako funkci.