Bucle do - while
¶
Es una variante especial del bucle while
.
Al contrario que el bucle while
, que comprueba la condición antes
de entrar en el bucle, el bucle do - while
la evalúa al final del bucle.
Esto implica que el bucle se ejecutará al menos una vez.
do
{
bloque de sentencias;
}
while (condicion);
El uso de do - while
es muy habitual en los menús de introducción de datos
por parte de un usuario.
Al menos una vez el usuario tendrá que introducir los datos
Si se detecta un error, se vuelven a solicitar
El siguiente ejemplo, que vuelve a utilizar la introducción del ordinal de un mes,
muestra cómo con do - while
se obtiene una versión
más compacta respecto a su alternativa vista anteriormente usando
while
.
Ejemplo 1
#include <iostream>
using namespace std;
int main()
{
int mes;
do
{
cout << "Dame el mes: (1, 2, ..., 12): ";
cin >> mes;
if (mes < 1 || mes > 12)
cout << "El valor introducido no es válido.\n";
}
while (mes < 1 || mes > 12);
if (mes == 1 || mes == 3 || mes == 5 || mes == 7 ||
mes == 8 || mes == 10 || mes == 12)
cout << "El mes tiene 31 dias.\n";
else if (mes == 2)
cout << "El mes tiene 28 o 29 dias.\n";
else if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
cout << "El mes tiene 30 dias.\n";
else
cout << "¡Imposible!\n";
}
Edita, compila y ejecuta el código
El siguiente ejemplo utiliza el bucle do - while
para un menú,
uno de sus usos más habituales.
Ejemplo 2
#include <iostream>
using namespace std;
int main()
{
int opcion;
double celsius, kelvin;
do
{
cout << "Este programa transforma temperaturas.\n";
cout << "Elija una opcion:\n";
cout << "1. De grados celsius a grados kelvin\n";
cout << "2. De grados kelvin a grados celsius \n\n";
cout << "Por favor, introduzca su opcion (1 o 2): ";
cin >> opcion;
if (opcion != 1 && opcion !=2)
cout << "La opción elegida no es válida\n";
}
while (opcion != 1 && opcion !=2);
switch(opcion)
{
double celsius, kelvin;
case 1: // paso de Celsius a Kelvin
cout << "Introduzca la temperatura en grados Celsius: ";
cin >> celsius;
if (celsius >= -273)
{
kelvin = celsius + 273;
cout << celsius << " grados C son " << kelvin << " grados K.\n";
}
else
cout<<"Temperatura por debajo del cero absoluto.\n";
break;
case 2: // paso de Kelvin a Celsius
cout << "Introduzca la temperatura en grados kelvin: ";
cin >> kelvin;
if (kelvin >= 0)
{
celsius = kelvin - 273;
cout << kelvin << " grados K son " << celsius << " grados C.\n";
}
else
cout<<"Temperatura por debajo del cero absoluto.\n";
break;
default: // Puede obviarse en este caso
cout<<"La opcion escogida no es valida.\n";
}
}