No se puede imprimir los datos de una estructura en C.
Mi objetivo aquí es imprimir los datos de los estudiantes contenidos en la estructura.
Mi pregunta es por qué no puedo imprimir los datos de la estructura.
Aquí está mi código:
typedef struct _STUDENT{
char fullname[50];
int ID;
float scores[6];
} STUDENT;
void input(STUDENT* student){
fflush(stdin);
printf("\nIngrese el nombre completo del estudiante: ");
scanf("%s", student->fullname);
printf("\nIngrese el ID: ");
scanf("%d", &student->ID);
for(int i = 0; i < 6; i++){
printf("\nIngrese la calificación para el curso %d: ", i+1);
scanf("%f", &student->scores[i]);
}
}
void output(STUDENT* student){
printf("\nNombre completo del estudiante: %s", student->fullname);
printf("\nID del estudiante: %d", student->ID);
for(int i = 0; i < 6; i++){
printf("\nCalificación del estudiante: %f", student->scores[i]);
}
}
int main(){
STUDENT* students;
int size;
printf("Ingrese el número de estudiantes: ");
scanf("%d",&size);
students = (STUDENT*)calloc(size,sizeof(STUDENT));
for(int i =0;i<size;i++){ input(students+i);="" }="" for(int="" i=""></size;i++){><size;i++){
output(students+i);
}
return 0;
}
aquí está la salida:
nombre completo del estudiante: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
id del estudiante: 50
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
en la función output
intento imprimir algunos datos pero ninguno se ha impreso. output(students+i);=”” }=”” return=”” 0;=”” }=”” ="" aquí="" está="" la="" salida:="" nombre="" completo="" del="" estudiante:="" id="" del="" estudiante:="" 50="" calificación="" del="" estudiante:="" 0.000000="" calificación="" del="" estudiante:="" 0.000000="" calificación="" del="" estudiante:="" 0.000000="" calificación="" del="" estudiante:="" 0.000000="" calificación="" del="" estudiante:="" 0.000000="" calificación="" del="" estudiante:="" 0.000000="" en="" la="" función="" `output`="" intento="" imprimir="" algunos="" datos="" pero="" ninguno="" se="" ha=""></size;i++){
output(students+i);
}
return 0;
}
aquí está la salida:
nombre completo del estudiante: ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
id del estudiante: 50
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
calificación del estudiante: 0.000000
en la función output
intento imprimir algunos datos pero ninguno se ha impreso.>
davy.ai
Parece que el problema está con la función
scanf
utilizada en la funcióninput
para obtener los valores de entrada del usuario. Específicamente, el especificador de formato%s
utilizado conscanf
se utiliza para leer una cadena de caracteres, perofullname
es solamente un puntero a un carácter. Por lo tanto,scanf
no sabe la ubicación adecuada en la memoria para almacenar el valor de entrada.Para solucionar esto, debes utilizar el especificador de formato
%m
en lugar de%s
para asignar memoria dinámicamente afullname
utilizando la funciónmalloc
. Aquí tienes una versión actualizada de la funcióninput
con este cambio:Con este cambio,
fullname
debería contener correctamente el valor introducido y ser imprimible.