En
lenguaje C,
para escribir una instrucción
de salto continue
(continuar)
, se utiliza la sintaxis:
La instrucción de salto continue
siempre se usa para interrumpir
(romper) la ejecución normal de un bucle.
Sin embargo, el
control del programa no se transfiere a la primera
instrucción
después del bucle (como sí hace la
instrucción break,
véase el apartado
anterior),
es decir, el bucle no finaliza, sino que, finaliza la iteración
en curso, transfiriéndose el control del programa a la
condición de salida del bucle, para decidir si se debe
realizar
una nueva iteración o no.
Por tanto, la instrucción continue
finaliza (termina) la ejecución de una iteración
de un
bucle, pero, no la ejecución del bucle en sí. De
forma
que, la instrucción continue
salta (no ejecuta) las instrucciones que existan después de
ella, en la iteración de un bucle.
Ejemplo
1: En el programa
siguiente se muestra como se puede utilizar la instrucción continue:
|
#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" );
continue;
/* En el caso de que n sea
un cero,
la
iteración en curso del bucle
se
interrumpe aquí. */
}
printf( "El opuesto es: %d\n",
-n );
a += n;
} while
( n >= -10
&& n <= 10 );
printf( "Suma:
%d", a );
return 0;
}
|
El código del programa es el mismo que el del ejemplo 1 del
apartado anterior, 4.1
Instruccion break,
excepto por la instrucción break,
que ha sido sustituida por la instrucción continue.
El programa puede ser la solución para el problema
siguiente,
el cual se diferencia del ejemplo 1 del apartado anterior en que si
el usuario
introduce un cero, el bucle no deja de iterar.
Diseñe
el agoritmo de un programa que:
1º)
Pida por teclado un número (dato entero).
2º) Si el
número introducido por el usuario es distinto de cero,
muestre por pantalla el mensaje:
- "El opuesto
es: <-número>".
En caso contrario, muestre
el mensaje:
- "ERROR: El cero
no tiene opuesto.".
3º) Repita los
pasos 1º y 2º, mientras que, el usuario
introduzca un
número mayor o igual que -10 y menor o igual que 10.
4º) Muestre
por pantalla la suma de los números introducidos por el
usuario.
En pantalla:
Introduzca un número entero: 2
El opuesto es: -2
Introduzca
un número entero: 0
ERROR: El cero no tiene opuesto.
Introduzca
un número entero: -59
El opuesto es: 59
Suma: -57
|
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 |
2 |
| 4 |
(Comprobar
si n = 0) |
0 |
2 |
|
La
condición de la alternativa simple (if)
es falsa. |
|
|
| 5 |
printf( "El
opuesto es: %d\n", -n
) |
0 |
2 |
| 6 |
a
+= n |
2 |
2 |
|
Fin
de la iteración 1. |
|
|
| 7 |
(Comprobar
si n >= -10 y n <= 10) |
2 |
2 |
|
La
condición del bucle (do...while)
es verdadera.
Inicio de la iteración 2. |
|
|
| 8 |
printf( "Introduzca
un número entero:"
) |
2 |
2 |
| 9 |
scanf( "%d",n ) |
2 |
0 |
| 10 |
(Comprobar
si n = 0) |
2 |
0 |
|
La
condición de la alternativa simple (if)
es verdadera. |
|
|
| 11 |
printf( "ERROR: El
cero no tiene opuesto."
) |
2 |
0 |
| 12 |
continue |
2 |
0 |
|
La
2ª iteración se interrumpe (finaliza)
aquí.
El control del programa se transfiere (salta) a la
condición de salida del
bucle (do...while). |
|
|
| 13 |
(Comprobar
si n >= -10 y n <= 10) |
2 |
0 |
|
La
condición del bucle (do...while)
es verdadera.
Inicio de la iteración 3. |
|
|
| 14 |
printf( "Introduzca
un número entero:"
) |
2 |
0 |
| 15 |
scanf( "%d",n ) |
2 |
-59 |
| 16 |
(Comprobar
si n = 0) |
2 |
-59 |
|
La
condición de la alternativa simple (if)
es falsa. |
|
|
| 17 |
printf( "El
opuesto es: %d\n", -n
) |
2 |
-59 |
| 18 |
a
+= n |
-57 |
-59 |
|
Fin
de la iteración 3. |
|
|
| 19 |
(Comprobar
si n >= -10 y n <= 10) |
-57 |
-59 |
|
La
condición del bucle (do...while)
es falsa.
El bucle finaliza después de 3 iteración. |
|
|
| 20 |
printf( "Suma: %d", a ) |
-57 |
-59 |
Figura. Traza
del ejemplo 1.
La instrucción continue
se ejecuta cuando el usuario introduce un cero, interrumpiendo la
iteración en curso; pero, el bucle solamente finaliza cuando
la
condición ( n >= -10 y n <= 10
) sea falsa.
Normalmente, al igual que ocurre con la instrucción break,
cuando en un bucle se utiliza una instrucción continue,
la ejecución de ésta también se
condiciona.
En el ejemplo 1, la iteración en curso del bucle se
interrumpe si es verdadera
la condición ( n = 0
).
Ejemplo 2: No
obstante, el problema también se puede resolver sin hacer
uso de la instrucción continue:
|
#include
<stdio.h>
int
main()
{
int
numero, acumulador;
acumulador = 0;
do
{
printf( "Introduzca un numero entero:
" );
scanf( "%d",
&numero
);
if ( numero == 0 )
{
printf( "ERROR: El
cero no tiene opuesto.\n" );
}
else
{
printf( "El opuesto
es: %d\n", -numero );
acumulador += numero;
}
} while
( numero >= -10
&& numero <= 10
);
printf( "Suma:
%d", acumulador );
return 0;
}
|
Los resultados
por pantalla de este programa son idénticos
a los del algoritmo anterior.
|