Guest User

Untitled

a guest
Jan 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include "getnum.h"
  6.  
  7. #define MAX_STRING 30
  8. #define BLOCK 5
  9. #define NEW_LINE { putchar('\n'); }
  10. #define CLEAN_BUFFER { while(getchar()!='\n'); }
  11.  
  12. typedef struct
  13. {
  14.     unsigned int legajo;
  15.     char nombre[MAX_STRING];
  16.     char apellido[MAX_STRING];
  17. }Talumno;
  18.  
  19. Talumno ** leerAlumnos(void);
  20. void imprimeAlumnos(Talumno ** vec);
  21. void liberaAlumnos(Talumno ** vec);
  22. Talumno unAlumno(void);
  23.  
  24. int
  25. main(void)
  26. {
  27.     Talumno ** alumnos;
  28.  
  29.     alumnos = leerAlumnos();
  30.     imprimeAlumnos(alumnos);
  31.    
  32.     liberaAlumnos(alumnos);
  33.  
  34.     return 0;
  35. }
  36.  
  37. Talumno**
  38. leerAlumnos(void)
  39. {
  40.     int i = 0;
  41.     Talumno ** resp = NULL;
  42.     Talumno ** aux;
  43.  
  44.     do
  45.     {
  46.         if (i%BLOCK==0)
  47.         {
  48.             if (NULL == (aux = realloc(resp, sizeof(*resp)*(i+BLOCK))))
  49.             {
  50.                 free(aux);
  51.                 return NULL;
  52.             }
  53.             else
  54.             {
  55.                 resp = aux;
  56.             }
  57.         }
  58.  
  59.         if(NULL == (resp[i] = malloc(sizeof(**resp))))
  60.         {
  61.             free(resp);
  62.             return NULL;
  63.         }
  64.         else
  65.         {
  66.             *resp[i] = unAlumno();
  67.         }
  68.     }
  69.     while (resp[i++]->legajo != 0);
  70.  
  71.     resp[i]->nombre[0] = 0;
  72.     resp[i]->apellido[0] = 0;
  73.  
  74.     resp = realloc(resp, i*sizeof(*resp));
  75.  
  76.     return resp;
  77. }
  78.  
  79. void
  80. imprimeAlumnos(Talumno ** vec)
  81. {
  82.     int i;
  83.  
  84.     for (i = 0; vec[i]->legajo != 0; i++)
  85.     {
  86.         printf("Legajo: %d\n", vec[i]->legajo);  
  87.         printf("Nombre: %s\n", vec[i]->nombre);
  88.         printf("Apellido: %s\n", vec[i]->apellido);
  89.         putchar('\n');
  90.     }
  91. }
  92.  
  93. void
  94. liberaAlumnos(Talumno ** vec)
  95. {
  96.     int i = 0;
  97.  
  98.     for (i = 0; vec[i]->legajo != '\0'; i++)
  99.     {
  100.         free(vec[i]);
  101.     }
  102.  
  103.     free(vec);
  104. }
  105.  
  106. Talumno
  107. unAlumno(void)
  108. {
  109.     Talumno alumno;
  110.  
  111.     do
  112.     {
  113.         alumno.legajo = getint("Ingrese el numero de legajo: ");
  114.     }
  115.     while (alumno.legajo < 0);
  116.    
  117.     NEW_LINE
  118.     if(alumno.legajo != 0)
  119.     {
  120.         printf("Ingrese su nombre: ");
  121.         scanf("%s", (alumno.nombre));
  122.         CLEAN_BUFFER
  123.         NEW_LINE
  124.  
  125.         printf("Ingrese su apellido: ");
  126.         scanf("%s", (alumno.apellido));
  127.         CLEAN_BUFFER
  128.     }
  129.  
  130.     return alumno;
  131. }
Add Comment
Please, Sign In to add comment