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 haces
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 ?
void mifuncionlectoraparaint( int * punteroaint) {
scanf("%d", punteroaint
); int valoringresado = *punteroaint;
// mas logica usando el valor ingresado, que se obtiene usando valoringresado
}
se usa desde otro lados, al estilo scanf
...
mifuncionlectoraparaint( & mivariableint )
Lo mismo con float
Solucion 2b.Alternativa: Usas una variable local a la funcion para leer y solo asignas al final:
void mifuncionlectoraparaint( int * punteroaint) {
int variablelocal;
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 floats
void mifuncionlectoraparatodos( void * punteroadato, int esEntero) {
if( esEntero == 1 ) {
scanf("%d", (int *) punteroadato
); int valoringresado =*(int *) punteroadato;
// logica especifica para int, usando valoringresado
} else {
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.