El código tiene varias fallas:
1.- alum
es un array de enteros y después intentas pedir una cadena como si alum
fuera un array de caracteres:
scanf("%s", alumno[i].alum);
Solución: alum
debe ser un array de caracteres:
struct alumnos
{
char alum[50];
float cal[10];
}alumno[10];
2.- No tiene sentido comparar una dirección de memoria con un entero:
if(alumno[i].cal>=6)
Ten en cuenta que cal
es una simple alias de la dirección del primer elemento del array, así que el resultado que esperaras puede ser erróneo.
Noto que tu intención es pedir 10
calificaciones por teclado y verificar si es mayor o igual a 6
, para lograr esto, debes hacer uso de un bucle anidado:
for(int j = 0; j < 10; j++)
{
printf("Ingrese la %d calificacion: \n", j + 1);
scanf("%f", &alumno[i].cal[j]);
if(alumno[i].cal[j] >= 6)
printf("Pasa\n");
else
printf("No pasa\n");
}
Date cuenta que no hace falta el segundo if
, es redundante.
3.- Sí vas a pedir una cadena por medio de scanf
, evita el desbordamiento de búfer:
//Con esto el usuario solo podrá ingresar 49 caracteres.
scanf("%49s", alumno[i].alum);
En este hilo explico más a fondo sobre como evitar este tipo de desbordamiento.
El código corregido quedaría así:
struct alumnos
{
char alum[50];
float cal[10];
}alumno[10];
int i;
int main(int argc, char *argv[])
{
printf("Ingresa el nombre de 10 alumnos junto con su calificacion de la materia de matematicas\n");
for(i=0; i<10; i++)
{
printf("Nombre del alumno: \n");
scanf("%49s", alumno[i].alum);
for(int j = 0; j < 10; j++)
{
printf("Ingrese la %d calificacion: \n", j + 1);
scanf("%f", &alumno[i].cal[j]);
if(alumno[i].cal[j] >= 6)
printf("Pasa\n");
else
printf("No pasa\n");
}
}
return 0;
}
Observación:
No uses variables globales, no la necesitas en este caso. Mira este hilo para más información.