Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


3.4. Interrumpir un bucle: break

Podemos salir de un bucle antes de tiempo si lo interrumpimos con la orden "break":

/*  ej030401.c                 */
/*  "for" interrumpido con     */
/*  "break"                    */
/*  Ejemplo del apartado 3.4   */
/*  Curso de C, Nacho Cabanes  */

#include 

int main()
{
    int i;

    for (i=0; i<=10; i++)
    {
        if (i==5) 
            break;
        printf("%d ", i);
    }

    return 0;
}

El resultado de este programa es:

0 1 2 3 4

(en cuanto se llega al valor 5, se interrumpe el "for", por lo que no se alcanza el valor 10).

Ejercicio propuesto 3.4.1: Crea un programa que pida un número al usuario (entre 1 y 100) y muestre tantas letras A como indique ese número, usando "break" para terminar.

Es una orden que se debe tratar de evitar, porque puede conducir a programas difíciles de leer, en los que no se cumple la condición de repetición del bucle, sino que se interrumpe por otros criterios. Como norma general, es preferible reescribir la condición del bucle de otra forma. En el ejemplo anterior, bastaría que la condición fuera "contador < 5". Un ejemplo ligeramente más complejo podría ser mostrar los números del 105 al 120 hasta encontrar uno que sea múltiplo de 13, que no se mostrará. Lo podríamos hacer de esta forma (poco correcta):

/*  ej030402.c                 */
/*  "for" interrumpido con     */
/*  "break" (2)                   */
/*  Ejemplo del apartado 3.4   */
/*  Curso de C, Nacho Cabanes  */

#include 

int main()
{
    int i;

    for (i=105; i<=120; i++)
    {
        if (i % 13 == 0) 
            break;

        printf("%d ", i);
    }

    return 0;
}

O reescribirlo de esta otra (preferible):

/*  ej030403.c                 */
/*  Alternativa a un "for"     */ 
/*  interrumpido con "break"   */
/*  Ejemplo del apartado 3.4   */
/*  Curso de C, Nacho Cabanes  */

#include 

int main()
{
    int i=105;

    while ( (i<=120) && (i % 13 != 0) )
    {
        printf("%d ", i);
        i++;
    }

    return 0;
}

(Sí, en la mayoría de los casos, un "for" se puede convertir en un "while", como se ve en ese ejemplo y en el siguiente:)

/*  ej030404.c                  */
/*  "while" comparado con "for" */ 
/*  Ejemplo del apartado 3.4    */
/*  Curso de C, Nacho Cabanes   */

#include 

int main()
{
    int i;
    
    /* Contar de 1 a 5 con "for" */ 
    for (i=1; i<=5; i++)
    {
        printf("%d ", i);
    }
    

    /* Contar de 1 a 5 con "while" */
    i=1;
    while (i<=5)
    {
        printf("%d ", i);
        i++;
    }

    return 0;
}

Ejercicio propuesto 3.4.2: Crea un programa que pida al usuario dos números y escriba su máximo común divisor (pista: una solución lenta pero sencilla es probar con un "for" todos los números descendiendo a partir del menor de ambos, hasta llegar a 1; cuando encuentres un número que sea divisor de ambos, interrumpes la búsqueda con "break").
Ejercicio propuesto 3.4.3: Crea un programa que pida al usuario dos números y escriba su mínimo común múltiplo (pista: una solución lenta pero sencilla es probar con un "for" todos los números a partir del mayor de ambos, de forma creciente; cuando encuentres un número que sea múltiplo de ambos, interrumpes la búsqueda con "break"
Ejercicio propuesto 3.4.4: Crea una versión alternativa del ejercicio 3.4.2 (máximo común divisor) usando "while", en vez de "for" y "break".
Ejercicio propuesto 3.4.5: Crea una versión alternativa del ejercicio 3.4.3 (mínimo común múltiplo) usando "while", en vez de "for" y "break".