elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Ayuda) Error con un bucle while en un constructor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Ayuda) Error con un bucle while en un constructor  (Leído 1,583 veces)
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
(Ayuda) Error con un bucle while en un constructor
« en: 25 Mayo 2015, 17:34 pm »

Hola. Muy buenas a todos. Hoy traigo una duda de las que uno piensa que el compilador está fallando porque no tiene otra explicación.

Primero voy a introducir: Estoy intentando imitar la clase string a modo de ejercicio. Pues bien, en el constructor está pasado algo solo descriptible a través de la salida (está debajo del código).

Código
  1. String::String(const char *init_value) {
  2. unsigned int num_characters = 0;
  3.  
  4. while(init_value[num_characters] != (char)NULL)
  5. num_characters += 1;
  6.  
  7. _num_characters = num_characters;
  8. _value = (char *)malloc(num_characters + 1);
  9.  
  10. _value[num_characters] = (char)0;
  11.  
  12. while(--num_characters >= 0) {
  13. printf("%d ", num_characters);  // _value[num_characters] = init_value[num_characters];
  14. }
  15. }

Pues bien, la salida es la siguiente:
3 2 1 0 -1 -2 -3 -4 //... y así hasta el infinito
(El comentario no está en la salida, solo es para aclarar)

Como ven, aunque num_characters valga menos de 0, el while se sigue repitiendo...

Espero que sea error del compilador, porque si no yo sería muy tonto



« Última modificación: 25 Mayo 2015, 17:36 pm por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: (Ayuda) Error con un bucle while en un constructor
« Respuesta #1 en: 25 Mayo 2015, 17:44 pm »

num_characters es unsigned, no tiene signo, siempre sera >= 0 (por mucho que num_characeters sea 0 cumple que == 0 y continuara el while y pasara de 0 a un número gigante.

Yo haría un while(--num_characters) y cuando sea 0 ya para.


En línea

Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: (Ayuda) Error con un bucle while en un constructor
« Respuesta #2 en: 25 Mayo 2015, 18:17 pm »

... Por eso algunas veces me siento tonto. Claro xD Gracias!

Para el que le interese, aquí le dejo el código con el error solucionado :D

Código
  1. String::String(const char *init_value) {
  2. unsigned int num_characters = 0;
  3.  
  4. while(init_value[num_characters] != (char)NULL)
  5. num_characters += 1;
  6.  
  7. _num_characters = num_characters;
  8. _value = (char *)malloc(num_characters + 1);
  9. _value[num_characters] = (char)0;
  10.  
  11. while(true) {
  12. --num_characters;
  13.  
  14. _value[num_characters] = init_value[num_characters];
  15.  
  16. if(num_characters == 0)
  17. break;
  18. }
  19. }
« Última modificación: 25 Mayo 2015, 18:20 pm por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: (Ayuda) Error con un bucle while en un constructor
« Respuesta #3 en: 25 Mayo 2015, 20:11 pm »

Así también es una opción:

Código
  1. ++num_characters;
  2.  
  3. while (num_characters-- > 0)
  4.    printf("%u ", num_characters);

Y si desplazas el postdecremento una posición:

Código
  1. ++num_characters;
  2.  
  3. while (num_characters --> 0)
  4.   printf("%u ", num_characters);

parece una flechita :)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines