[C con Clase] bucle infinito en do..while

Toni tsptoni en gmail.com
Lun Nov 15 19:03:29 CET 2010


Hola,

Hoy en clase un compañero me mostró un curioso error, y estuve pensando a
qué podía ser debido.

El tema es, que con el siguiente codigo:

#include <iostream>
using namespace std;

int main() {
int num;

do{
fflush(stdin);
cout<<"\nIntroduzca un numero menor de 5";
cin>>num;
}while(num>5);


return 0;
}


Si introduces números todo perfecto, si es 5 o mayor, te volverá a solicitar
el número y sinó, sale del bucle.

El problema viene al intentar controlar si meten un carácter. En ese caso,
se transforma en un bucle infinito el cual ya no espera un nuevo carácter,
sinó que muestra infinitamente el mensaje "introduzca un numero menor de 5".
Supuse que quizás el problema era debido a que no limpiaba el buffer, pero
con fflush(stdin) sigue dando el mismo resultado, he probado a hacer una
comprobación explícita while(int(num)>5); pero tampoco funciona. Parece ser
que una vez que a num le asignas el carácter, ya no deja asignarle uno nuevo
y por ello nunca cumple la condición.

¿Alguien sabe a qué es debido?

Nota: En Linux (concretamente Ubuntu) no da este error, si insertas un
carácter sale del bucle (aunque tampoco sería el resultado deseado, pero por
lo menos no es un bucle infinito).

Saludos,


--
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101115/7fc03d89/attachment.html>


Más información sobre la lista de distribución Cconclase