Unsigned int, en bucles infinitos...

Iniciado por tanychu, 21 Septiembre 2010, 10:06 AM

0 Miembros y 1 Visitante están viendo este tema.

tanychu

Muchas gracias por ir resolviendome las dudas que me van saliendo jejeje, esta es mi nueva duda, a ver si podeis solucionarmela, jejeje.

Mi duda es la siguiente:

Resulta que tengo que recoger mediante teclado, un valor que no debe de ser en ningún caso valor negativo.

Por supuesto, lo declaro unsigned int para no darle más tamaño del necesario.

Pero me ocurre lo siguiente, le hago un while para que si el numero es menor de 0 me vuelva a preguntar el valor. Tipo asi.

while (respuesta<0)
{
    cout << lo que sea >>;
    cin >> respuesta;
}

el problema es que al ser unsigned int, si meto un valor negativo me crea un bucle infinito, sé que se puede arreglar poniendole valor entero a la variable pero, de que me sirve entonces? que me enseñen si voy a poner solo valores positivos,cree las variables tipo, unsigned int. no tiene lógica, debe de haber una solución.

a ver si alguien me ilumina jejeje. un saludo!!! :D :D

Editado: Es sobre C++ y uso el compilador wxdev-c++.

CaraLimon

#1
Cita de: tanychu en 21 Septiembre 2010, 10:06 AM
Por supuesto, lo declaro unsigned int para no darle más tamaño del necesario.


El tipo "unsigned int" creo que ocupa lo mismo que un "int", la diferencia está en que el mismo rango que abarca el "int" te lo da el "unsigned" pero a partir de 0, asi puedes llegar más lejos. Así que si es por ahorrar tamaño no hace falta..

Pruebalo con "int" mientras no te den una respuesta mejor.

Anco

Estas usando el unsigned int por las razones equivocadas, segun tengo entendido, el unsigned ocupa el mismo espacio que el int normal (como dice CaraLimon), solo que te da la capacidad de almacenar una cantidad mayor de numeros positivos (no creo que sea tu caso). De todas maneras, solo debes usarlo para manejar numeros positivos. Si existe la posibilidad de que ingresen un numero negativo, tienes que usar el int sin el modificador.
Y es posible que el unsigned int, no haya sido el problema fundamental en tu codigo, sino la manera de como lo abordaste (lo digo por lo lo del bucle infinito), .

De todas maneras, si me equivoco espero me corrijan, tengo escasos conocimientos respecto al tema xD
???

Akai

Unsigned int: ocupa el mismo tamaño que un entero (4 bytes). En cambio, tiene un rango de representación mayor ya que solo representa valores enteros positivos (representados en binario natural, mientras que el entero está en complemento a 2 (no confundir la representación con la operación, en este caso es la primera))

Aquello que ocupa menos tamaño es un short (2bytes).

PD: tamaños variables según la arquitectura.

tanychu

Gracias, eso esta claro jejee, pero, para ciertas cosas, si se ahorraría uno tamaño, ya que, el rango del unsigned int, en valores positivos, es casi el doble que el int, si a mi me hace falta, utilizar un rango más alto de numeros positivos que los que me permite el int normal, ya tendría que irme a un long int, entonces ya no ahorraría espacio, me comprendeis ahora? jejeje, para ciertas cosas no hace falta pero para otras si, y lo que me gustaría es saber paliar ese problemilla que me sale con el unsigned. saludos!!!!

do-while

¡Buenas!

Tanto si introduces un valor positivo como si lo introduces negativo, lo que estaras obteniendo en tu variable entera sera un patron de bits que luego deberas encargarte tu de interpretar...

Si estas esperando un int de 4 bytes (32 bits), e introduces -1, la representacion de este numero y de (2^32 - 1) sera la misma en cuanto al patron de bits, y en general, -n sera lo mismo que 2^32 - n....

Por lo tanto, si esperas un unsigned y alguien te da un entero con signo, en principio no los podras distinguir solo por el valor que contiene la variable. Si quieres puedes leer en una cadena o string la entrada y comprobar si aparecen o no signos negativos...

En cuanto a lo del bucle infinito, no se si es por lo de arriba o no, pon el codigo.

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

tanychu

Mañana te pongo el código completo, por q lo tengo en clase, se me olvido el pendrive y no lo tengo en casa, xD, mañana lo coloco completo.. saludos..