Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: juanks92 en 22 Abril 2013, 20:25 pm



Título: estructura de datos
Publicado por: juanks92 en 22 Abril 2013, 20:25 pm
Hola que tal me dejaron un proyecto de estructura de datos de dar altas y bajas al igual que modificaciones de alumnos pero al momento de compilar me marca error  en el primer printf alguien sabria decirme por que seria de mucha ayuda si me lo pueden resolver ya que no se que sea aqui esta el codigo:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 5


struct alumno{
   char  mat[10];
   char  nom[50];
   char  carrera[20];
   int   edad;
   
};

int busqueda(alumno [10], char [20], int);
void altas(struct alumno[10],int *);
void bajas(struct alumno[10],int *);
void cambios(struct alumno[10],int );
void consultas(struct alumno[10],int );


  int main()
{
   struct alumno students[10];
   int contador=0;
   char opcion;
   do
   {   system("cls")
    printf("1) Altas");
   printf("2) Bajas");
   printf("3) Cambios");
   printf("4) Consultas");
   printf("5) Salida");
   printf("Opcion [ ]\b\b");
   opcion=getch();
   switch(opcion)
   {
     case '1': altas(students,&contador); break;
     case '2': bajas(students,&contador); break;
     case '3': cambios(students,contador); break;
     case '4': consultas(students,contador); break;
     case '5': break;
     default: printf("Opcion no valida"); getch();
   }
   }while(opcion!='5');


int busqueda( struct alumno stu[], char llave[], int n)
{
  int i;

  for (i=0; i<n; i++)
      if (strcmpi (stu.mat,llave)==0)
     return(i);
  return (-1);
}

void altas (struct alumno stu[], int *c)
{
  int ban;
  char temp[10];
  float aux;

  system("cls")
  if (*c <max)
  {  do{ clrscr();
    printf("Matricula: ");
    fflush(stdin);// limpia el buffer de entrada de datos, sirve para cuando necesitas tomar muchos datos seguidos y se generan saltos de línea automáticos que se guardan en este buffer.


    gets(temp);
    ban=busqueda(stu,temp,*c);
    if (ban!=-1)
    {
       printf("Ya existe.");
       getch();

    }
  }while (ban!=-1);

       strcpy(stu[*c].mat, temp);
       printf("Nombre: ");  gets(stu[*c].nom);
       printf("Carrera: "); gets(stu[*c].carrera);
       printf("Edad: "); scanf("%d",&stu[*c].edad);
     
}

  else
  {
     printf("No hay espacio suficiente");
     getch();
  }


void bajas (struct alumno stu[], int *c)
{
  int pos,i;
  char temp[10];

  clrscr();
  if (*c >0)
  {  printf("Matricula: ");
     fflush(stdin);
     gets(temp);
     pos=busqueda(stu,temp,*c);
     if (pos!=-1)
     {
   for(i=pos;i<(*c)-1;i++)
      stu=stu[i+1];
   (*c)--;
     }
     else
     {
   printf("No se encontro");
   getch();
     }
  }
  else
  {
     printf("No hay datos");
     getch();
  }
}


void consultas(struct alumno stu[], int c)
{
  int pos,i;
  char temp[10];

  clrscr();
  if (c >0)
  {  printf("Matricula: ");
     clrscr();
     fflush(stdin);
     gets(temp);
     pos=busqueda(stu,temp,c);
     if (pos!=-1)
     {
   printf("\nMatricula: %s",stu[pos].mat);
   printf("\nNombre: %s", stu[pos].nom);
   printf("\nCarrera: %s", stu[pos].carrera);
   printf("\nEdad: %d", stu[pos].edad);
   getch();
     }
     else
     {
   printf("No se encontro");
   getch();
     }
  }
  else
  {
     printf("No hay datos");
     getch();
  }
}

void cambios(struct alumno stu[], int c)
{
  int pos;
  char temp[10],campo;
  float aux;

  clrscr();
  if (c >0)
  {  printf("Matricula: ");
     fflush(stdin);
     gets(temp);
     pos=busqueda(stu,temp,c);
     if (pos!=-1)
     {
   do
   {  clrscr();
      printf("--- Datos Actuales ---");
      printf("Matricula: %s",stu[pos].mat);
      printf("\nNombre: %s", stu[pos].nom);
      printf("\nCarrera: %s", stu[pos].carrera);
      printf("\nEdad: %d", stu[pos].edad);
      printf("\n \n Seleccione el campo que desea cambiar \n" );
      puts("1) Nombre");
      puts("2) Carrera");
      puts("3) Edad");
       puts("4) Regresar al menu Principal");
      printf("\nCampo: ");campo=getch();
      fflush(stdin);
      switch(campo)
      {
          case '1': printf("Nombre: ");  gets(stu[pos].nom); break;
          case '2': printf("Carrera: "); gets(stu[pos].carrera); break;
          case '3': printf("Edad: "); scanf("%d",&stu[pos].edad); break;
          
          break;
          case '4': break;
      }
   }while (campo!='4');
     }
     else
     {
   printf("No se encontro");
   getch();
     }
  }
  else
  {
     printf("No hay datos");
     getch();
  }
}

}
 si encuentran otro error y lo localizan se los agradecere


Título: Re: estructura de datos
Publicado por: gorystyle en 22 Abril 2013, 21:18 pm
panita estoy revisando tu codigo pero tienes demasiados errores..
te faltan muchos ';' antes de algunos printf() , deberia cambiar el clrscr() por system("cls") ese es otro error que te esta dando, hay errores de identacion osea faltan y sobran llaves en algunas partes.. estas trabajando algunos punteros como si fueran objetos normales osea con '.' en vez de '->' ademas la identacion es fatal y es muy dificil ayudarte asi... si corriges la identacion y subes nuevamente el programa te ayudo pero me da ladilla comenzar yo a acomodar las sangrias en cada bloque de codigo


Título: Re: estructura de datos
Publicado por: juanks92 en 22 Abril 2013, 21:43 pm
ok gracias por la ayuda deja corregir esos errores


Título: Re: estructura de datos
Publicado por: juanks92 en 22 Abril 2013, 21:48 pm
una pregunta que es identacion??


Título: Re: estructura de datos
Publicado por: gorystyle en 22 Abril 2013, 21:52 pm
una pregunta que es identacion??

es colocar el codigo de manera ordenada y respetando las sangrias.. y deberias tambien colocar el codigo cuando lo vallas a publicar aqui buscar la etiqueta que dice codigo tiene el simbolo de # de esta manera es mas legible y te pueden ayudar mas ejemplo::

Código:
#include <stdio.h>

int main()
{
    int i = 0;
    for(i = 0; i<20; i++)
    {
           if((i%2)==0)
           {
                 printf("%d",i);
           }
    }

    return 0;
}

algo asi si notas como cada vez que entro a una instruccion hago sangria hacia la derecha -> y cuando la finalizo vuelvo a emparejar donde habia quedado


Título: Re: estructura de datos
Publicado por: juanks92 en 22 Abril 2013, 22:42 pm
Ya lo tengo donde lo puedo poner para que lo visualices ademas ya cambie los clrs


Título: Re: estructura de datos
Publicado por: gorystyle en 22 Abril 2013, 22:47 pm
ps subelo aqui pero recuerda cuando estes posteando buscar la etiqueta code y pegas el codigo dentro de lo q te sale


Título: Re: estructura de datos
Publicado por: juanks92 en 22 Abril 2013, 23:21 pm
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 5


 struct alumno
 {
   char  mat[10];
   char  nom[50];
   char  carrera[20];
   int   edad;
   
 };

   int busqueda(alumno [10], char [20], int);
   void altas(struct alumno[10],int *);
   void bajas(struct alumno[10],int *);
   void cambios(struct alumno[10],int );
   void consultas(struct alumno[10],int );


  int main()
  {
       struct alumno students[10];
       int contador=0;
       char opcion;
       do
         {   
           system("cls")
           printf("1) Altas");
          printf("2) Bajas");
           printf("3) Cambios");
          printf("4) Consultas");
          printf("5) Salida");
          printf("Opcion [ ]\b\b");
          opcion=getch();
          switch(opcion)
                                     {
                                       case '1': altas(students,&contador); break;
                                        case '2': bajas(students,&contador); break;
                                       case '3': cambios(students,contador); break;
                                       case '4': consultas(students,contador); break;
                                       case '5': break;
                                       default: printf("Opcion no valida");
                                        getch();
                                      }
        }
       
       while(opcion!='5');


     int busqueda( struct alumno stu[], char llave[], int n)
                                             {
                                               int i;
                                               for (i=0; i<n; i++)
                                               if (strcmpi (stu.mat,llave)==0)
                                              return(i);
                                               return (-1);
                                             }

     void altas (struct alumno stu[], int *c)
                                                      {
                                                        int ban;
                                                        char temp[10];
                                                        float aux;
                                                        system("cls")
                                                        if (*c <max)
                                                                        { 
                                                                          do
                                                                             {
                                                                               clrscr();
                                                                              printf("Matricula: ");
                                                                              fflush(stdin);// limpia el buffer de entrada de datos, sirve para cuando necesitas tomar muchos datos seguidos y se generan saltos de línea automáticos que se guardan en este buffer.
                                                                               gets(temp);
                                                                              ban=busqueda(stu,temp,*c);
                                                                              if (ban!=-1)
                                                                                                         {
                                                                                                           printf("Ya existe.");
                                                                                                           getch();

                                                                                                          }
                                                                             }
                                                                         
                                                                          while (ban!=-1);
                                                                          strcpy(stu[*c].mat, temp);
                                                                          printf("Nombre: ");  gets(stu[*c].nom);
                                                                          printf("Carrera: "); gets(stu[*c].carrera);
                                                                          printf("Edad: "); scanf("%d",&stu[*c].edad);
     
                                                                        }

                                                        else
                                                             {
                                                               printf("No hay espacio suficiente");
                                                               getch();
                                                             }
                                                      }

     void bajas (struct alumno stu[], int *c)
                                              {
                                                int pos,i;
                                                char temp[10];
                                                system("cls")
                                                if (*c >0)
                                                               { 
                                                                 printf("Matricula: ");
                                                                 fflush(stdin);
                                                                 gets(temp);
                                                                 pos=busqueda(stu,temp,*c);
                                                                 if (pos!=-1)
                                                                                            {
                                                                                             for(i=pos;i<(*c)-1;i++)
                                                                                             stu=stu[i+1];
                                                                                             (*c)--;
                                                                                            }
                                                                 else
                                                                      {
                                                                       printf("No se encontro");
                                                                       getch();
                                                                      }
                                                               }
                                                else
                                                     {
                                                       printf("No hay datos");
                                                       getch();
                                                     }
                                              }


     void consultas(struct alumno stu[], int c)
                                                {
                                                  int pos,i;
                                                  char temp[10];
                                                  system("cls")
                                                  if (c >0)
                                                                  { 
                                                                    printf("Matricula: ");
                                                                    system("cls")
                                                                    fflush(stdin);
                                                                    gets(temp);
                                                                    pos=busqueda(stu,temp,c);
                                                                    if (pos!=-1)
                                                                                               {
                                                                                                printf("\nMatricula: %s",stu[pos].mat);
                                                                                                printf("\nNombre: %s", stu[pos].nom);
                                                                                                printf("\nCarrera: %s", stu[pos].carrera);
                                                                                                printf("\nEdad: %d", stu[pos].edad);
                                                                                                getch();
                                                                                               }
                                                                    else
                                                                         {
                                                                          printf("No se encontro");
                                                                          getch();
                                                                         }
                                                                  }
                                                  else
                                                        {
                                                          printf("No hay datos");
                                                          getch();
                                                        }
                                                }

     void cambios(struct alumno stu[], int c)
                                              {
                                                int pos;
                                                char temp[10],campo;
                                                float aux;

                                                system("cls")
                                                if (c >0)
                                                                     { 
                                                                       printf("Matricula: ");
                                                                       fflush(stdin);
                                                                       gets(temp);
                                                                       pos=busqueda(stu,temp,c);
                                                                       if (pos!=-1)
                                                                                                 {
                                                                                                  do
                                                                                                    { 
                                                                                                       system("cls")
                                                                                                      printf("--- Datos Actuales ---");
                                                                                                      printf("Matricula: %s",stu[pos].mat);
                                                                                                      printf("\nNombre: %s", stu[pos].nom);
                                                                                                      printf("\nCarrera: %s", stu[pos].carrera);
                                                                                                      printf("\nEdad: %d", stu[pos].edad);
                                                                                                      printf("\n \n Seleccione el campo que desea cambiar \n" );
                                                                                                      printf("1) Nombre");
                                                                                                      printf("2) Carrera");
                                                                                                      printf("3) Edad");
                                                                                                       printf("4) Regresar al menu Principal");
                                                                                                      printf("\nCampo: ");campo=getch();
                                                                                                      fflush(stdin);
                                                                                                      switch(campo)
                                                                                                                                                                 {
                                                                                                                                                                  case '1': printf("Nombre: ");  gets(stu[pos].nom); break;
                                                                                                                                                                  case '2': printf("Carrera: "); gets(stu[pos].carrera); break;
                                                                                                                                                                  case '3': printf("Edad: "); scanf("%d",&stu[pos].edad); break;
          
                                                                                                                                                                break;
                                                                                                                                                                  case '4': break;
                                                                                                                                                                 }
                                                                                                     }
                                                                                                   while (campo!='4');
                                                                                                 }
                                                                       else
                                                                            {
                                                                             printf("No se encontro");
                                                                             getch();
                                                                            }
                                                                     }
                                                else
                                                     {
                                                       printf("No hay datos");
                                                       getch();
                                                     }
                                              }

  }


Título: Re: estructura de datos
Publicado por: flony en 22 Abril 2013, 23:52 pm
por el printf parece c, no soy experto, pero bue yo le doy a c++...
pasando al problema en cuestión veo que la función búsqueda es la mas usada
Código:
int busqueda( struct alumno stu[], char llave[], int n)
                                             {
                                               int i;
                                               for (i=0; i<n; i++)
                                               if (strcmpi (stu.mat,llave)==0)
                                              return(i);
                                               return (-1);
                                             }
en ella veo que pasas dos datos stu.mat y llave, la llave debería provenir de las otras funciones, pero nunca la pedís, deberías pedir la "llave"
Código:
scanf("%c",&llave);
...o algo asi...como dije prefiero cin y cout...para la entrada de datos es mas fácil ;)
edito, tampoco pedís que ingrese la opción en ...
Código:
 do
         {   
           system("cls")
           printf("1) Altas");
          printf("2) Bajas");
           printf("3) Cambios");
          printf("4) Consultas");
          printf("5) Salida");
          printf("Opcion [ ]\b\b");
          opcion=getch();
          switch(opcion)
                                     {
                                       case '1': altas(students,&contador); break;
                                        case '2': bajas(students,&contador); break;
                                       case '3': cambios(students,contador); break;
                                       case '4': consultas(students,contador); break;
                                       case '5': break;
                                       default: printf("Opcion no valida");
                                        getch();
                                      }
        }
       
       while(opcion!='5');


Título: Re: estructura de datos
Publicado por: juanks92 en 23 Abril 2013, 00:19 am
En que parte debo poner los scanf, es que ocupo printf y scanf por que llevo programacion basica y es lo que me enseñaron es por eso que tengo muchas dudas de mi programa ya que lo que se es por tutoriales pero no se mucho por eso mi duda del scanf


Título: Re: estructura de datos
Publicado por: rir3760 en 23 Abril 2013, 06:43 am
Algunos de los errores ya se comentaron, una lista de ellos es:

* En el prototipo de la función "busqueda" falta la palabra reservada "struct":
Código
  1. int busqueda (alumno [10], char [20], int);

* Falta la llave de cierre de la función main justo después de la sentencia:
Código
  1. }while (opcion != '5');

* Falta el punto y coma al final de varias sentencias:
Código
  1. system ("cls")

* Tienes una llave de cierre de mas al final del programa.

Con esas correcciones el programa debe por lo menos compilar.

También hay algunos detalles que, sin ser errores, se deben corregir:

* En las funciones "altas" y "cambios" declaras la variable "aux" pero no la utilizas, hay que eliminarla.
* Caso similar con la función "consultas" y la variable "i".
* En la función "cambios" en el tercer caso tienes dos sentencias "break;":
Código
  1. case '3':   printf ("Edad: ");
  2.   scanf ("%d", &stu[pos].edad);
  3.   break;
  4.   break;
Con una basta, hay que eliminar la otra.

También hay que eliminar el uso de la biblioteca conio de Borland, la función gets y la función fflush en la forma "fflush(stdin)". Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html)

Un saludo