hola, buenos dias, no entiendo por que me marca errores en el renglon donde declaro: datos a[N], y notas b[N];y en los ultimos FOR.. puede ser que haya algun problema con el #define N 100?? desde ya, muchas gracias a los que me ayuden!
/*crear una aplicacion en c que lea nombre cedula edad y 3 notas de n estudiantes
el programa debe decir si el usuario aprobo o no el curso sacando el promedio
de sus 3 notas luego debe permitirle al usuario buscar por numero de cedula
y mostras las notas promedio y permitir editar cualquiera de las notas ingresadas */
#include <stdio.h>
#define N 100;
main()
{
struct datos {
char nombre[12];
int edad;
long cedula;
};
struct notas {
float nota1;
float nota2;
float nota3;
float prom;
};
datos a[N];
notas b[N];
long l;
int j,h,o,y,w,p;
char m='s';
while (m='s')
{
for(j=0;j<N;j++)
{
printf("ingrese nombre del alumno: ");
scanf("%s\n", &a[j].nombre);
printf("ingrese edad del alumno: ");
scanf("%s\n", &a[j].edad);
printf("ingrese numero de cedula: ");
scanf("%s\n", &a[j].cedula);
printf("ingrese nota 1: ");
scanf("%f\n", &b[j].nota1);
printf("ingrese nota 2: ");
scanf("%f\n", &b[j].nota2);
printf("ingrese nota 3: ");
scanf("%f\n", &b[j].nota3);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3) ;
}
for (j=0;j<N;j++)
{
if (b[j].promedio>=7)
{
printf("el alumno %s aprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
}
else
{
printf("el alumno %s desaprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
}
}
printf("desea buscar alumno por numero de cedula?, si=1, no=2: ");
scanf("%d", &h);
if (h==1)
{
printf ( "ingrese numero de cedula:");
scanf("%ld", &l);
for (j=0;j<N;j++)
{
if (l==a[j].cedula)
{
printf("alumno: %s\n", a[j].nombre);
printf ("notas: %.2f %.2f %.2f\n", b[j].nota1, b[j].nota2, b[j].nota3);
printf ("promedio: %.2f\n", b[j].promedio);
}
}
printf ("desea modificar alguna nota de este alumno? 1-si, 2-no");
scanf("%d", &o);
if (o==1)
{
printf("que nota desea modificar? para nota 1: presione 1, para nota 2 presione 2, para nota 3 presione 3");
printf ("para modificar todas, predione 4");
scanf("%d", &y);
switch (y)
{
case 1:
{
printf ("ingrese la nota 1: ");
scanf ("%f", b[j].nota1);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
case 2:
{
printf ("ingrese la nota 2: ");
scanf ("%f", b[j].nota2);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
case 3:
{
printf ("ingrese la nota 3: ");
scanf ("%f", b[j].nota3);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
case 4:
{
printf ("ingrese la nota 1: ");
scanf ("%f\n", b[j].nota1);
printf ("ingrese la nota 2: ");
scanf ("%f\n", b[j].nota2);
printf ("ingrese la nota 3: ");
scanf ("%f\n", b[j].nota3);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
}
}
}
}
printf("desea ver la lista de todos los alumnos y sus notas? si-1, no-2");
scanf("%d", &w);
if (w==1)
{
for (p=0;p<N;p++)
{
printf ("%s\t", a[p].nombre);
printf ("notas: %f %f %f\t", b[p].nota1, b[p]nota2, b[p]nota3);
printf ("promedio: %.2f\n", b[p].promedio);
}
}
printf ("desea iniciar el programa del principio? s-si, n-no");
scanf("%c", &m);
}
Deberías hacer:
struct datos a[N];
struct notas b[N];
O en todo caso usar typedef.
Saludos!
mriandolo por encima tb veo esto
while (m='s')
deberia de ser
while (m=='s')
= es de asignacion y == de comparacion
A simple vista puedo decirte lo siguiente:
- En vez de #define N 100, mejor usa;
const int N=100;
Después de todo no se moverá.
- Cambia la variable float prom por float promedio, ya que lo usas bastante en el programa.
- Reemplaza el while (m='s') por while (m=='s'), recuerda lo de asignación y comparación.
- En el código:
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3) ;
Tienes un error al final, al usar el carácter ")", borralo.
- En el codigo:
printf ("notas: %f %f %f\t", b[p].nota1, b[p]nota2, b[p]nota3);
Olvidaste colocar los puntos.
- No sé porque haces lo siguiente, fuera del bucle:
printf ("desea iniciar el programa del principio? s-si, n-no");
scanf("%c", &m);
No tiene sentido, lo ideal sería que este dentro del bucle (while).
- Usa int main() con return 0 al final del código;
int main()
{
// "Aqui va tu codigo"
return 0;
}
Es mejor para usarlo en cualquier otro IDE.
Muchas gracias, ahi el programita se compila sin errores, pero hace algunas cosas que no entiendo por que, y revise revise y no encuentro la solucion, no se que pongo mal..
1. cuando me pide el primer nombre del alumno necesito poner dos palabras o dos caracteres separados para que pase a pedir la edad.(en los nombres posteriores no).
2. el promedio me saca cualquier cosa..
3. cuando imprime los nombres de los alumnos con sus promedios, el segundo y tercer nombre me sale un numero, en vez del nombre..
4. hace la pregunta de si desea buscar un alumno por Nº de cedula y al lado sale el cartel de desea modificar alguna nota...
adjunto la imagen asi se dan cuenta..
#include <stdio.h>
const int N=3;
main()
{
struct datos {
char nombre[10];
int edad;
long cedula;
};
struct notas {
float nota1;
float nota2;
float nota3;
float promedio;
};
struct datos a[N];
struct notas b[N];
long l;
int j,h,o,y,w,p;
char m='s';
while (m=='s')
{
for(j=0;j<N;j++)
{
printf("ingrese nombre del alumno: ");
scanf("%s\n", &a[j].nombre);
printf("ingrese edad del alumno: ");
scanf("%s\n", &a[j].edad);
printf("ingrese numero de cedula: ");
scanf("%s\n", &a[j].cedula);
printf("ingrese nota 1: ");
scanf("%f\n", &b[j].nota1);
printf("ingrese nota 2: ");
scanf("%f\n", &b[j].nota2);
printf("ingrese nota 3: ");
scanf("%f\n", &b[j].nota3);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
}
for (j=0;j<N;j++)
{
if (b[j].promedio>=7)
{
printf("el alumno %s aprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
}
else
{
printf("el alumno %s desaprobo con un promedio de %.2f\n", a[j].nombre, b[j].promedio);
}
}
printf("desea buscar alumno por numero de cedula?, si=1, no=2: ");
scanf("%d", &h);
if (h==1)
{
printf ( "ingrese numero de cedula:");
scanf("%ld", &l);
for (j=0;j<N;j++)
{
if (l==a[j].cedula)
{
printf("alumno: %s\n", a[j].nombre);
printf ("notas: %.2f %.2f %.2f\n", b[j].nota1, b[j].nota2, b[j].nota3);
printf ("promedio: %.2f\n", b[j].promedio);
}
}
}
printf ("desea modificar alguna nota de este alumno? 1-si, 2-no");
scanf("%d", &o);
if (o==1)
{
printf("que nota desea modificar? para nota 1: presione 1, para nota 2 presione 2, para nota 3 presione 3");
printf ("para modificar todas, predione 4");
scanf("%d", &y);
switch (y)
{
case 1:
{
printf ("ingrese la nota 1: ");
scanf ("%f", b[j].nota1);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
case 2:
{
printf ("ingrese la nota 2: ");
scanf ("%f", b[j].nota2);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
case 3:
{
printf ("ingrese la nota 3: ");
scanf ("%f", b[j].nota3);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
case 4:
{
printf ("ingrese la nota 1: ");
scanf ("%f\n", b[j].nota1);
printf ("ingrese la nota 2: ");
scanf ("%f\n", b[j].nota2);
printf ("ingrese la nota 3: ");
scanf ("%f\n", b[j].nota3);
b[j].promedio= (b[j].nota1 + b[j].nota2 + b[j].nota3)/3 ;
break;
};
}
}
printf("desea ver la lista de todos los alumnos y sus notas? si-1, no-2");
scanf("%d", &w);
if (w==1)
{
for (p=0;p<N;p++)
{
printf ("%s\t", a[p].nombre);
printf ("notas: %f %f %f\t", b[p].nota1, b[p].nota2, b[p].nota3);
printf ("promedio: %.2f\n", b[p].promedio);
}
}
printf ("desea iniciar el programa del principio? s-si, n-no");
scanf("%c", &m);
}
}
(http://)
muchas gracias...
Creo que ya llegaste a los problemas de scanf y el buffer de entrada :xD
y cual seria la solucion? no entiendo que me queres decir...
leete el post que se llama "lo que no se debe hacer en C/C++" algo asi, esta fijo aca en esta sección, es decir esta entre los primeros, ahi te dicen como leer las cadenas de caracteres y te hablan del buffer...