¿Cómo puedo implementar un ciclo do- while solo usando sentencias goto?
do{ // Some code } while ();Me gusta esto, pero solo usando goto para crear el equivalente de eso.
do{ // Some code } while (condition);es igual a:
label: { // Some code } if(condition) goto label;Un bucle do- while es una variación de un bucle while . La condición se verifica mediante un ciclo while y las declaraciones están en el segmento do .
El bucle do while comprueba la condición al final del bucle. Esto significa que las declaraciones dentro del cuerpo del bucle se ejecutarán al menos una vez, incluso si la condición nunca se cumple.
La variable dentro del ámbito del ciclo. Es decir, debe estar dentro del bucle para acceder a él. Es lo mismo que si declararas una variable dentro de una función, solo las cosas en la función tienen acceso a ella.
do{ statement(s); }while(condition);En lugar de usar un ciclo for , while o do while, puede hacer el mismo trabajo usando goto. Me gusta esto:
int i = 0; firstLoop: printf("%d", i); i++; if(i<10) goto firstLoop; printf("\nout of first loop"); Pero se sugiere no usar sentencias goto. El objetivo que logra al usar la declaración goto, se puede lograr más fácilmente usando otras declaraciones condicionales como if-else , etc.
Es fácil de hacer.
Para empezar, debe tener en cuenta que el cuerpo de la declaración do-while forma un ámbito de bloque incluso si el cuerpo no está representado por una declaración compuesta. Por ejemplo este programa es correcto.
#include <stdio.h> int main(void) { struct A { int s; }; do printf( "sizeof( struct A { int x; int y; } ) = %zu\n", sizeof( struct A { int x; int y; } ) ); while ( sizeof( struct A ) == 8 ); printf( "sizeof( struct A ) = %zu\n", sizeof( struct A ) ); return 0; }La salida del programa es
sizeof( struct A { int x; int y; } ) = 8 sizeof( struct A ) = 4Es decir, la estructura A declarada en la subsentencia de la instrucción do-while está en su propio ámbito interno en relación con el ámbito donde se escribe la instrucción do-while y donde se define la estructura A con un miembro de datos. Y cada vez que la subdeclaración obtiene el control, la estructura A se declara de nuevo.
La instrucción do-while reescrita usando una instrucción goto tendrá el siguiente aspecto, como se muestra en el programa de demostración a continuación. En este caso, debe usar una declaración compuesta para introducir el alcance interno.
#include <stdio.h> int main(void) { struct A { int s; }; L1: { printf( "sizeof( struct A { int x; int y; } ) = %zu\n", sizeof( struct A { int x; int y; } ) ); } if ( sizeof( struct A ) == 8 ) goto L1; printf( "sizeof( struct A ) = %zu\n", sizeof( struct A ) ); return 0; }