|
|
| Contenidos > 4.3
Instrucción goto |
|
|
| 4.3 Instrucción goto |
|
|
|
En
lenguaje C,
para escribir una instrucción
de salto goto
(ir_a),
se utiliza la sintaxis:
goto <nombre_de_la_etiqueta>
|
La instrucción de salto goto
se puede usar en un programa,
para
transferir incondicionalmente el control del mismo
a
la primera instrucción después de una etiqueta, o dicho
de otra forma, al ejecutar una instrucción goto,
el control del
programa se transfiere (salta) a la primera instrucción
después de una etiqueta. Una etiqueta se define
mediante su
nombre (identificador)
seguido del carácter dos puntos (:).
Ejemplo: En el
siguiente programa se
utiliza la instrucción goto
para resolver el mismo problema que el del ejemplo 1 del
apartado 4.1
Instrucción break:
|
#include
<stdio.h>
int
main()
{
int
n, a;
a = 0;
do
{
printf( "Introduzca un numero entero:
" );
scanf( "%d", &n
);
if ( n == 0 )
{
printf( "ERROR: El
cero no tiene opuesto.\n" );
goto etiqueta_1;
/* En el caso de que n sea
un cero,
el control de
programa salta a la
primera instrucción después de
etiqueta_1.
*/
}
printf( "El opuesto es: %d\n",
-n );
a += n;
} while
( n >= -10
&& n <= 10 );
etiqueta_1:
printf( "Suma:
%d", a );
return 0;
}
|
Los resultados
por pantalla de este programa son idénticos
a
los de los programas de los ejemplos 1 y 2 del
apartado 4.1
Instrucción break.
En pantalla:
Introduzca un número entero: -4
El opuesto es: 4
Introduzca
un número entero: 12
El opuesto
es: -12
Introduzca
un número entero: 0
ERROR: El
cero no tiene opuesto.
Suma: 8
|
La traza
del programa es:
Secuencia: |
Acción
(instrucción): |
Valor
de:
|
|
|
a |
n |
| 1 |
a
=
0 |
0 |
? |
|
Inicio
de la iteración 1. |
|
|
| 2 |
printf( "Introduzca
un número entero:"
) |
0 |
? |
| 3 |
scanf( "%d",n ) |
0 |
-4 |
| 4 |
(Comprobar
si n == 0) |
0 |
-4 |
|
La
condición de la alternativa simple
(if)
es falsa. |
|
|
| 5 |
printf( "El
opuesto es: %d\n", -n
) |
0 |
-4 |
| 6 |
a
+= n |
-4 |
-4 |
|
Fin
de la iteración 1. |
|
|
| 7 |
(Comprobar
si n >= -10 && n
<=
10) |
-4 |
-4 |
|
La
condición del bucle (do...while)
es verdadera.
Inicio de la iteración 2. |
|
|
| 8 |
printf( "Introduzca
un número entero:"
) |
-4 |
-4 |
| 9 |
scanf( "%d",n ) |
-4 |
12 |
| 10 |
(Comprobar
si n == 0) |
-4 |
12 |
|
La
condición de la alternativa simple (if)
es falsa. |
|
|
| 11 |
printf( "El
opuesto es: %d\n", -n
) |
-4 |
12 |
| 12 |
a
+= n |
8 |
12 |
|
Fin
de la iteración 2. |
|
|
| 13 |
(Comprobar
si n >= -10 && n
<=
10) |
8 |
12 |
|
La
condición del bucle (do...while)
es verdadera.
Inicio de la iteración 3. |
|
|
| 14 |
printf( "Introduzca
un número entero:"
) |
8 |
12 |
| 15 |
scanf( "%d",n ) |
8 |
0 |
| 16 |
(Comprobar
si n == 0) |
8 |
0 |
|
La
condición de la alternativa simple (if)
es verdadera. |
|
|
| 17 |
printf( "ERROR: El
cero no tiene opuesto."
) |
8 |
0 |
| 18 |
goto etiqueta_1 |
8 |
0 |
|
El
bucle se interrumpe en la
3ª iteración.
El control del programa se transfiere (salta) a la
primera instrucción después de etiqueta_1. |
|
|
| 19 |
printf( "Suma: %d", a ) |
8 |
0 |
Figura. Traza
del ejemplo 1.
Normalmente,
al igual que ocurre con las instrucciones break
y continue,
cuando en un algoritmo se utiliza una instrucción goto,
la ejecución de ésta también se
condiciona.
|
|
|
|
|
| Contenidos > Apartado siguiente |
|
| 4.4 Instrucción return
(próximamente) |
|
|
|
|