statement - la caja del interruptor lo hace mientras anida
switch statement example in c (1)
#include<stdio.h>
int main()
{
int n=0, i=2;
switch(1)
{
case 0:do
{
case 1: n++;
case 2: n++;
}while(--i > 0);
}
printf("n = %d",n);
}
Esperaba que la salida para el código anterior fuera 0, como caso 1 y caso 2 dentro de do mientras que dentro de caso 0. Switch está probando valor 1, por lo que el caso 0 nunca se ejecutará y, por lo tanto, ninguno de los casos 1 o 2.
valor de n viene a ser 4. ¿Alguna explicación?
Tu código salta al medio de un ciclo. A partir de ese momento, ignora los casos de la instrucción switch, por lo que hace n++
, n++
, condición de comprobación, bucle, etc. Ayuda si piensa en un case
como una etiqueta, y switch
como un goto
:
int n=0, i=2;
if (1 == 0)
goto label0;
else if (1 == 1)
goto label1;
else if (1 == 2)
goto label2;
label0:
do {
puts("loop");
label1:
n++;
label2:
n++;
} while (--i > 0);
Al igual que su código original, esto simplemente omite la parte del cuerpo del bucle antes de la label1
(las puts
), luego continúa como si hubiera ingresado al bucle de la manera normal.