[ Foro de C ]

Problema con un struct de apuntadores

21-Oct-2022 04:43
Invitado (MMotya)
1 Respuestas

Hola. He hecho este programa pero el problema radica en que el alum[i][j].prom no lee los valores del float por alguna razón. ¿Alguien sabe como ayudarme? POR FAVOR.
#include <stdio.h>
#include <stdlib.h>
#define fila 3
#define col 2
#define max 3
typedef struct infoAlum{
char nombre[15];
int matricula;
float cal[2];
float prom;
}alumnos;

int main(){
alumnos **alum;
int i,j,k;
float prom;
alum = (alumnos**)malloc(fila*sizeof(alumnos*));

// For para columnas
for(i=0;i<fila;i++){
alum[i]=(alumnos*)malloc(col*sizeof(alumnos));
}

printf("Introduzca los valores de la matriz\n");

for(i=0;i<fila;i++){
for(j=0;j<col;j++){
printf("Introduce el nombre del alumno numero [%d] [%d]\n",i+1,j+1);
scanf("%s", alum[i][j].nombre);
printf("Introduce la matricula del alumno numero [%d] [%d]\n",i+1,j+1);
scanf("%d",&alum[i][j].matricula);
for(k=0;k<max;k++){
printf("Introduce la calificacion %d del alumno numero [%d] [%d]\n",k+1,i+1,j+1);
scanf("%f",&alum[i][j].cal[k]);
printf("%f\n",alum[i][j].cal[k]);
alum[i][j].prom=(alum[i][j].cal[k]+alum[i][j].prom);
printf("La suma en turno %d es %f\n",k+1, alum[i][j].prom);
}
alum[i][j].prom =(alum[i][j].prom)/3;
printf("El promedio de %s es %f \n",alum[i][j].nombre, alum[i][j].prom);
}
}
for(i=0;i<fila;i++){
for(j=0;j<col;j++){
printf("Nombre: [%s] \t",alum[i][j].nombre);
printf("Matricula: [%d] \t",alum[i][j].matricula);
printf("Promedio [%.2f] \n",alum[i][j].prom);
}
}


// Liberando los apuntadores de memoria
for (i=0;i<fila;i++){
for(j=0;j<col;j++){
free(alum[i]);
free(alum);
}
}
}


24-Oct-2022 00:32
Anti Mufa

El problema que encuentro con los promedios es que sumas antes de inicializar la variable prom

alum[i][j].prom=0.;

          alum[i][j].prom=0.;
           for(k=0; k<max; k++)
           {
               
               printf("Introduce la calificacion %d del alumno numero [%d] [%d]\n",k+1,i+1,j+1);
               scanf("%f",&alum[i][j].cal[k]);
               printf("%f\n",alum[i][j].cal[k]);
               alum[i][j].prom=(alum[i][j].cal[k]+alum[i][j].prom);
               printf("La suma en turno %d es %f\n",k+1, alum[i][j].prom);
           }
           alum[i][j].prom =(alum[i][j].prom)/3;






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...