Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: .:BlackCoder:. en 2 Mayo 2010, 19:38 pm



Título: cual es la diferencia [?]
Publicado por: .:BlackCoder:. 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...


Título: Re: cual es la diferencia [?]
Publicado por: biribau 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.


Título: Re: cual es la diferencia [?]
Publicado por: .:BlackCoder:. 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...


Título: Re: cual es la diferencia [?]
Publicado por: .:BlackCoder:. 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...


Título: Re: cual es la diferencia [?]
Publicado por: biribau 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.


Título: Re: cual es la diferencia [?]
Publicado por: .:BlackCoder:. 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...