cual es la diferencia [?]

Iniciado por .:BlackCoder:., 2 Mayo 2010, 19:38 PM

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

.:BlackCoder:.

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 (cpp) [Seleccionar]
BasePoint **objs = new BasePoint*[5];
// allocate space for 10 BasePoint pointers,
// they may be used to store derived classes

// creating objects
objs[0] = new Circle(7, 6, 55);
objs[1] = new Rectangle(12, 54, 21, 14);
objs[2] = new Square(19, 32, 10);
objs[3] = new Oval(43, 10, 4, 3);
objs[4] = new Square(3, 41, 3);

bool flag=false;
do {
cout << endl << "We have 5 objects with numbers 0..4" << endl;
cout << "Enter object number to view information about it " << endl;
cout << "Enter any other number to quit " << endl;
char onum; // in fact, this is a character, not a number
// this allows user to enter letter and quit... (1)
cin >> onum;

// flag -- user have entered number 0..4
flag = ((onum >= '0')&&(onum <= '4'));

if (flag)
objs[onum-'0']->info();//(2)

} while(flag);

// freeing memory
for(int i=0;i<5;i++)
delete objs[i];

delete [] objs;
cin.get();
return 0;
}


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...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




biribau

'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.

.:BlackCoder:.

Pero '0' en ascii es 0... Asi que para que le quiero restar 0 a un caracter?... No es mejor algo asi:
Código (cpp) [Seleccionar]
int onum;
cin >> onum;

// flag -- user have entered number 0..4
flag = ((onum >= 0)&&(onum <= 4));

if (flag)
objs[onum]->info();

} 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...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




.:BlackCoder:.

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...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




biribau

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.

.:BlackCoder:.

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


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