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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  cual es la diferencia [?]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: cual es la diferencia [?]  (Leído 3,371 veces)
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
cual es la diferencia [?]
« en: 2 Mayo 2010, 19:38 pm »

Wenas  :)... Andaba viendo unos codes y vi algo, que me llamo la atencion... Puesto que no le veo el ¿por que?... Aca les dejo parte del code, que me imagino con eso basta:

Código
  1. BasePoint **objs = new BasePoint*[5];
  2. // allocate space for 10 BasePoint pointers,
  3. // they may be used to store derived classes
  4.  
  5. // creating objects
  6. objs[0] = new Circle(7, 6, 55);
  7. objs[1] = new Rectangle(12, 54, 21, 14);
  8. objs[2] = new Square(19, 32, 10);
  9. objs[3] = new Oval(43, 10, 4, 3);
  10. objs[4] = new Square(3, 41, 3);
  11.  
  12. bool flag=false;
  13. do {
  14. cout << endl << "We have 5 objects with numbers 0..4" << endl;
  15. cout << "Enter object number to view information about it " << endl;
  16. cout << "Enter any other number to quit " << endl;
  17. char onum; // in fact, this is a character, not a number
  18. // this allows user to enter letter and quit... (1)
  19. cin >> onum;
  20.  
  21. // flag -- user have entered number 0..4
  22. flag = ((onum >= '0')&&(onum <= '4'));
  23.  
  24. if (flag)
  25. objs[onum-'0']->info();//(2)
  26.  
  27. } while(flag);
  28.  
  29. // freeing memory
  30. for(int i=0;i<5;i++)
  31. delete objs[i];
  32.  
  33. delete [] objs;
  34. cin.get();
  35. return 0;
  36. }

Ok... En (1) lo que no capto es, para que un char, segun mi ingles  :xD "permite ingresar un entero y salir" 0o? y que? igual flag no se va a hacer true si declaras onum como int... porq por ejemplo 'A' o 97 (o su valor en ascii) no es menor que 4  :-\

Y en (2) pes para que el " -'0' "?

Saludos, esas 2 dudas na mas y pes de antemano gracias...


En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: cual es la diferencia [?]
« Respuesta #1 en: 2 Mayo 2010, 20:27 pm »

'0' - '0' = 0
'1' - '0' = 1
...
onum lee un carácter luego si metes un carácter del 0 al 4 llamará al info de ese objeto en el array, si es mayor que '4' o menor que '1' o sea no está en el rango, acaba el bucle y el programa
Recuerda 'A' - 'A' = 0 siempre, y una carcterística y común en los sistemas de codificación de caracteres es que las letras vayan consecutivas, y las cifras, luego si '0' = x numero ascii, '1' = x + 1, y N(caracter cifra) = x + N(numero),  por tanto N(numero) = N(caracter cifra) - x = N(caracter cifra) - '0', sólo hay que restarle el primero.


En línea

.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: cual es la diferencia [?]
« Respuesta #2 en: 2 Mayo 2010, 20:42 pm »

Pero '0' en ascii es 0... Asi que para que le quiero restar 0 a un caracter?... No es mejor algo asi:
Código
  1. int onum;
  2. cin >> onum;
  3.  
  4. // flag -- user have entered number 0..4
  5. flag = ((onum >= 0)&&(onum <= 4));
  6.  
  7. if (flag)
  8. objs[onum]->info();
  9.  
  10. } while(flag);

Lo que me extraña es que dice que con char "permite" salir si se ingresa una letra... y con int tambien deberia  :¬¬ porq el valor por ejemplo, de 'A', 97 creop, sigue siendo mayor que 4 asi que flag no se hace true, y por eso se saldria del bucle...

Pero no es asi yo lo probe y si ingresas una letra se sale... pero si ingresas el numero 4, por ejemplo te muestra square.. y luego al presionar una letra se vuelve loco el programa xD como un bucle infinito... debe ser algo con respecto al buffer...

Saludos gracias por responder...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: cual es la diferencia [?]
« Respuesta #3 en: 2 Mayo 2010, 20:56 pm »

Me equivoque bien feo  ;D elñ valor de '0' ne ascii no es 0 es 48, asi que ya entendi el porq... estan haciendo como un cast... Superada esa parte  :xD

Pero igual no veo el porq de que la forma en que yo lo hago no funciona... O weno funciona si ingresas una letra en la primera vuelta, y se sale del bucle como deberia ser. Pero si en la primera vuelta introduces un entero, se cumple la condicion del bucle, y en la segunda llegas a introducir una letra se vuelve loco...

Saludos...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



biribau

Desconectado Desconectado

Mensajes: 181


Ver Perfil
Re: cual es la diferencia [?]
« Respuesta #4 en: 2 Mayo 2010, 21:50 pm »

El problema es que lees un entero y tu le metes una letra, supongo que entonces no "come" caracteres del buffer, y este no mengua, y siempre tiene que leer, que es lo mismo lo perpetúa.
En línea

.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: cual es la diferencia [?]
« Respuesta #5 en: 2 Mayo 2010, 21:55 pm »

Mmmm yo crei que se hacia un cast con algo asi...
Código
  1. int x;
  2. cin>>x;//Si ingresas una letra, segun yo xD se hace un cast (int)... Pero pes al parecer no es asi
  3. cout<<x<<endl;

Weno muchas gracias por el dato...
Saludos...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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