elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  no entiendo los errores que me marca...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: no entiendo los errores que me marca...  (Leído 3,756 veces)
fer_fer_73

Desconectado Desconectado

Mensajes: 14



Ver Perfil
no entiendo los errores que me marca...
« en: 23 Febrero 2011, 23:17 pm »

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


En línea

con el rock en las venas...
xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: no entiendo los errores que me marca...
« Respuesta #1 en: 23 Febrero 2011, 23:23 pm »

Deberías hacer:
Código
  1. struct datos a[N];
  2. struct notas b[N];
  3.  

O en todo caso usar typedef.


Saludos!


En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: no entiendo los errores que me marca...
« Respuesta #2 en: 24 Febrero 2011, 00:30 am »

mriandolo por encima tb veo esto

Código
  1. while (m='s')

deberia de ser

Código
  1. while (m=='s')

= es de asignacion y == de comparacion
En línea

ShadowStorm

Desconectado Desconectado

Mensajes: 9



Ver Perfil
Re: no entiendo los errores que me marca...
« Respuesta #3 en: 24 Febrero 2011, 08:52 am »

A simple vista puedo decirte lo siguiente:

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

Código
  1. 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
  1. 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
  1. 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
  1. printf ("desea iniciar el programa del principio? s-si, n-no");
  2.     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
  1. int main()
  2. {
  3.     // "Aqui va tu codigo"
  4.  
  5.      return 0;
  6. }
  7.  

Es mejor para usarlo en cualquier otro IDE.
En línea

fer_fer_73

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Re: no entiendo los errores que me marca...
« Respuesta #4 en: 24 Febrero 2011, 19:04 pm »

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..

Código:
#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...

En línea

con el rock en las venas...
xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: no entiendo los errores que me marca...
« Respuesta #5 en: 26 Febrero 2011, 01:59 am »

Creo que ya llegaste a los problemas de scanf y el buffer de entrada :xD
En línea

fer_fer_73

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Re: no entiendo los errores que me marca...
« Respuesta #6 en: 26 Febrero 2011, 02:06 am »

y cual seria la solucion? no entiendo que me queres decir...
En línea

con el rock en las venas...
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: no entiendo los errores que me marca...
« Respuesta #7 en: 28 Febrero 2011, 04:06 am »

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...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines