Cita de: CalgaryCorpus en 29 Octubre 2017, 05:08 AM
Las direcciones de memoria son del mismo tamano, no importa a que dato apunten.
Lo malo es que los datos si tienen tipo.
3 soluciones posibles.
Solucion 1:
Haz 2 funciones, una que lee un int, otra que lee float y RETORNA el valor leido
luego en tu programa hacesCódigo (c) [Seleccionar]mivariable = funcionqueleeint();
y la funcionqueleeint() hace de todo, lee, chequea, itera, y devuelve el dato listo.
Haz lo mismo con otra funcion que lee float.
Solucion 2a:
Te gusta, quieres aprender o necesitas usar punteros.
Define 2 funciones, 1 que lee floats, otra que lee int. Hace lo mismo que lo anterior, pero en vez de retornar los valores, los asigna a la variable que se pasa como parametro.
Invocalas de manera separada de acuerdo al tipo de dato que quieres leer.
Quieres leer un int ?Código (c) [Seleccionar]void mifuncionlectoraparaint( int * punteroaint) {
printf("Ingrese int" );
scanf("%d", punteroaint);
int valoringresado = *punteroaint;
// mas logica usando el valor ingresado, que se obtiene usando valoringresado
}
se usa desde otro lados, al estilo scanfCódigo (c) [Seleccionar]...
mifuncionlectoraparaint( & mivariableint )
Lo mismo con float
Solucion 2b.
Alternativa: Usas una variable local a la funcion para leer y solo asignas al final:Código (c) [Seleccionar]void mifuncionlectoraparaint( int * punteroaint) {
int variablelocal;
printf("Ingrese int" );
scanf("%d", &variablelocal);
// agregar logica aqui que use la variable local
...
// y al final
*punteroaint = variablelocal;
}
Solucion 3a:
1 sola funcion que lee ints y floatsCódigo (c) [Seleccionar]void mifuncionlectoraparatodos( void * punteroadato, int esEntero) {
if( esEntero == 1 ) {
printf("Ingrese int" );
scanf("%d", (int *) punteroadato);
int valoringresado =*(int *) punteroadato;
// logica especifica para int, usando valoringresado
} else {
printf("Ingrese float" );
scanf("%f", (float *) punteroadato);
float valoringresado = *(float *) punteroadato;
// logica especifica para float, usando valoringresado
}
}
Se invoca de todos lados indicando si lo que se quiere leer es int o no, mas la direccion de memoria
Solucion 3b.
Lo mismo anterior, pero usar una variable local, y solo asignar al final, parecido a la solucion 2b.
Grandee hermano!!!! me pondré a estudiar duro con eso!!
Muchísimas gracias!!!