El lenguaje C también permite realizar saltos incondicionales, utilizando la orden "goto". Su uso indisciplinado está muy mal visto, porque puede ayudar a hacer programas llenos de saltos, difíciles de seguir.
El formato de "goto" es
goto etiqueta;
y la posición de salto se indica con "una etiqueta", una palabra seguida de un símbolo de dos puntos (:)
etiqueta:
como en el siguiente ejemplo, que escribe "Pasada 1", "Pasada 2" y así
sucesivamente hasta que se detenga la ejecución cerrando la ventana del
programa, porque el salto incondicional hacia un punto anterior crea un
"bucle sin fin":
/* ej030601.c */
/* "goto": saltos sin fin */
/* Ejemplo del apartado 3.6 */
/* Curso de C, Nacho Cabanes */
#include
int main()
{
int salto = 1;
repetir:
printf("Pasada %d; ", salto);
salto++;
goto repetir;
return 0;
}
En casos concretos, "goto" puede ser muy útil, por ejemplo, para salir de un bucle muy anidado (un "for" dentro de otro "for" que a su vez está dentro de otro "for": en este caso, "break" sólo saldría del "for" más interno, no del externo).
/* ej030602.c */
/* "for" y "goto" */
/* Ejemplo del apartado 3.6 */
/* Curso de C, Nacho Cabanes */
#include
int main()
{
int i, j;
for (i=0; i<=5; i++)
for (j=0; j<=20; j+=2)
{
if ((i==1) && (j>=7))
goto salida;
printf("i vale %d y j vale %d.\n", i, j);
}
salida:
printf("Fin del programa\n");
return 0;
}
El resultado de este programa es:
i vale 0 y j vale 0.
i vale 0 y j vale 2.
i vale 0 y j vale 4.
i vale 0 y j vale 6.
i vale 0 y j vale 8.
i vale 0 y j vale 10.
i vale 0 y j vale 12.
i vale 0 y j vale 14.
i vale 0 y j vale 16.
i vale 0 y j vale 18.
i vale 0 y j vale 20.
i vale 1 y j vale 0.
i vale 1 y j vale 2.
i vale 1 y j vale 4.
i vale 1 y j vale 6.
Fin del programa
Vemos que cuando i=1 y j>=7, se sale de los dos "for", mientras que el programa "casi equivalente" que emplea "break" no se comporta igual, sino que continúa y da todas las pasadas para i=2, i=3, i=4 e i=5.
/* ej030603.c */
/* "break" en vez de "goto"? */
/* Ejemplo del apartado 3.6 */
/* Curso de C, Nacho Cabanes */
#include
int main()
{
int i, j;
for (i=0; i<=5; i++)
for (j=0; j<=20; j+=2)
{
if ((i==1) && (j>=7))
break;
printf("i vale %d y j vale %d.\n", i, j);
}
printf("Fin del programa\n");
return 0;
}