No soy ningún experto, pero probablemente esto se deba a que en la funcion de ingreso estas dando a los punteros una dirección de memoria local dentro de la función y cuando se sale de esta función la dirección se vuelve indeterminada (creo).
Para dar valor a los punteros deberías hacer lo siguiente:
*val1 = valor;
Con esto le estás indicando al programa que asigne el valor al puntero, no su dirección de memoria. Sin embargo para hacer esto antes tienes que haber reservado memoria para el puntero con la función
malloc() y después tienes que liberarla con la función
free().
El programa quedaría entonces así:
void SolicitudEingresoDeValores();
float Promedio();
/* Declaracion de los punteros */
float *val1, *val2, *val3, *val4, *val5;
int main(int argc, char **argv)
{
float average;
/* Reservamos espacio en la memoria para poder asignar valores a los punteros */
SolicitudEingresoDeValores();
average = Promedio();
/* Una vez que lo hemos usado, liberamos este espacio */
return 0;
}
void SolicitudEingresoDeValores()
{
/* Como cambia de valor, con una variable sera suficiente */
float valor;
printf("ingrese el primer valor: \n"); *val1 = valor; // Asignamos el valor, no la direccion de memoria (pues es una variable local)
printf("ingrese el segundo valor: \n"); *val2 = valor;
printf("ingrese el tercer valor: \n"); *val3 = valor;
printf("ingrese el cuarto valor: \n"); *val4 = valor;
printf("ingrese el quinto valor: \n"); *val5 = valor;
}
float Promedio()
{
return ( *val1 + *val2 + *val3 + *val4 + *val5 ) / 5;
}
Como ya has reservado espacio para los punteros, la función
scanf() se podría usar simplemente así:
sin necesidad de un variable local, poniendo como parámetros directamente los punteros. Por lo tanto la función quedaría así:
void SolicitudEingresoDeValores()
{
printf("ingrese el primer valor: \n");
printf("ingrese el segundo valor: \n");
printf("ingrese el tercer valor: \n");
printf("ingrese el cuarto valor: \n");
printf("ingrese el quinto valor: \n"); }
Por supuesto aún se podrían mejorar muchas cosas, como utilizar arrays en lugar de punteros separados para poder realizar medias de un número variable de valores en cada programa. Sin embargo esto cumple con lo que querías en el programa original utilizando punteros.
Un saludo
PD: En la función
malloc() se tiene que indicar el tamaño de la variable (en bytes). Para ello se utiliza la función
sizeof().