no entiendo los errores que me marca...

Iniciado por fer_fer_73, 23 Febrero 2011, 23:17 PM

0 Miembros y 1 Visitante están viendo este tema.

fer_fer_73

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);
}
con el rock en las venas...

xassiz~

Deberías hacer:

struct datos a[N];
struct notas b[N];


O en todo caso usar typedef.


Saludos!

Oblivi0n

mriandolo por encima tb veo esto

while (m='s')

deberia de ser

while (m=='s')

= es de asignacion y == de comparacion

ShadowStorm

A simple vista puedo decirte lo siguiente:

- En vez de #define N 100, mejor usa;

Código (c++) [Seleccionar]
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:

Código (c++) [Seleccionar]
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:

Código (c++) [Seleccionar]
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:

Código (c++) [Seleccionar]
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;

Código (c++) [Seleccionar]
int main()
{
     // "Aqui va tu codigo"

      return 0;
}


Es mejor para usarlo en cualquier otro IDE.

fer_fer_73

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);
}
}





muchas gracias...

con el rock en las venas...

xassiz~

Creo que ya llegaste a los problemas de scanf y el buffer de entrada :xD

fer_fer_73

y cual seria la solucion? no entiendo que me queres decir...
con el rock en las venas...

.:BlackCoder:.

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...
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja