Advertisement
levartolona

double_last_name

Jan 11th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct student
  6. {
  7.     char *last_name;
  8.     char *name;
  9.     int height;
  10. }student_t;
  11.  
  12. student_t *journal_create(student_t* journal, int max_size)
  13. {
  14.     journal = malloc(sizeof(student_t) * max_size);
  15.     if (!journal)
  16.         return NULL;
  17.  
  18.     return journal;
  19. }
  20.  
  21. void j_delete(student_t* journal, int size)
  22. {
  23.     for (int i = 0; i < size; i++)
  24.     {
  25.         free((journal + i) -> name);
  26.         free((journal + i) -> last_name);
  27.     }
  28.     free(journal);
  29.  
  30.     return;
  31. }
  32.  
  33. student_t *journal_input(student_t* journal, int *size, int max_size)
  34. {
  35.     char tmp[256];
  36.  
  37.     if ((scanf("%s", tmp) != 1))
  38.     {
  39.         j_delete(journal, *size);
  40.         return NULL;
  41.     }
  42.  
  43.     (journal + *size) -> last_name = malloc(strlen(tmp) + 1);
  44.     strcpy((journal + *size) -> last_name, tmp);
  45.  
  46.  
  47.     if ((scanf("%s", tmp) != 1))
  48.     {
  49.         j_delete(journal, *size);
  50.         return NULL;
  51.     }
  52.  
  53.     (journal + *size) -> name = malloc(strlen(tmp) + 1);
  54.     strcpy((journal + *size) -> name, tmp);
  55.  
  56.     int height;
  57.     if ((scanf("%i", &height) != 1))
  58.     {
  59.         j_delete(journal, *size);
  60.         return NULL;
  61.     }
  62.  
  63.     (journal + *size) -> height = height;
  64.     (*size)++;
  65.  
  66.     return journal;
  67. }
  68.  
  69. void journal_output(student_t *journal, int size)
  70. {
  71.     for(int i = 0; i < size; i++)
  72.     {
  73.         printf("data about student β„–%d is ", i);
  74.         printf("%s %s %d", (journal + i) -> last_name, (journal + i) -> name, (journal + i) -> height);
  75.         printf("\n");
  76.     }
  77. }
  78.  
  79. void journal_double(student_t *journal, int size)
  80. {
  81.     char *tmp = NULL;
  82.  
  83.     for(int i = 0; i < size; i++)
  84.     {
  85.         tmp = malloc(strlen((journal + i) -> last_name) * 2 + 1);
  86.         snprintf(tmp, strlen((journal + i) -> last_name) * 2 + 1, "%s%s", (journal + i) -> last_name, (journal + i) -> last_name);
  87.         char* ln_tmp = NULL;
  88.         ln_tmp = realloc((journal + i) -> last_name, (strlen(tmp) + 1) * sizeof(char));
  89.         if(!ln_tmp)
  90.             j_delete(journal, size);
  91.  
  92.         (journal + i) -> last_name = ln_tmp;
  93.         strcpy((journal + i) -> last_name, tmp);
  94.         free(tmp);
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement