Advertisement
attilan

Mate1_b

Apr 21st, 2018
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.76 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<ctype.h>
  5.  
  6. #define MAX 255
  7. #define MAXNEV 50
  8. #define TRUE 1
  9.  
  10. typedef struct Lista {
  11.     char NEV[MAX + 1];
  12.     int KOR;
  13.     struct Lista *KOV;
  14. } Listaelem;
  15.  
  16. int getline(char s[], int lim);
  17. int betuE(char s[]);
  18. int jonev(char s[]);
  19. int szame(char s[], int alap);
  20. void elsoelem(Listaelem* ELSO, char nev[], int kor);
  21. Listaelem* hozzaad(Listaelem* ELSO, char nev[], int kor);
  22.  
  23. void main() {
  24.     Listaelem *ELSO;
  25.     char NEVINP[MAX + 1] = "";
  26.     char KORINP[MAX + 1] = "";
  27.    
  28.     int sorsz = 0;
  29.     int kor1 = 0;
  30.  
  31.     ELSO = NULL;
  32.     int ok1, ok2;
  33.     do {
  34.         ok1 = 0;
  35.         ok2 = 0;
  36.         printf("Kerem adja meg a %d. nevet: ", sorsz + 1);
  37.         if (!getline(NEVINP, MAX)) {
  38.             printf("\nBeolvasas vege.\n");
  39.             ok1 = 1;
  40.         }
  41.         else if (strlen(NEVINP) > 50)
  42.             printf("A nev max 50 karakter hosszu lehet!\n");
  43.         //else if (!betuE(NEVINP))
  44.         //  printf("A bemenet csak betuket es szokozt tartalmazhat!\n");
  45.         else if (!jonev(NEVINP))
  46.             printf("A nev formatuma hibas!\n");
  47.         else
  48.             do {
  49.                 printf("Kerem adja meg a %d. nevhez tartozo eletkort: ", sorsz + 1);
  50.                 if (!getline(KORINP, MAX)) {
  51.                     printf("Bekeres vege.\n");
  52.                     ok2 = 1;
  53.                     ok1 = 1;
  54.                 }
  55.                 else if (!szame(KORINP, 10))
  56.                     printf("A kor csak szam lehet!\n");
  57.                 else if ((kor1 = atoi(KORINP)) < 0)
  58.                     printf("Az eletkor 0-nal nagyobb kell, hogy legyen!\n");
  59.                 else {
  60.                     ELSO = hozzaad(ELSO, NEVINP, kor1);
  61.                     sorsz++;
  62.                     ok2 = TRUE;
  63.                 }
  64.             } while (!ok2);
  65.     } while (!ok1);
  66.  
  67.     printf("Siker.");
  68.     //teszt, hogy lefusson kell 3 személy legalább
  69.     //másként crashelni fog, de ha van 3 személy akkor legalább látni jó-e a listába illesztés
  70.     if (ELSO != NULL) {
  71.         printf("\n1. %s\t%d\n", ELSO->NEV, ELSO->KOR);
  72.         printf("2. %s\t%d\n", ELSO->KOV->NEV, ELSO->KOV->KOR);
  73.         printf("3. %s\t%d\n", ELSO->KOV->KOV->NEV, ELSO->KOV->KOV->KOR);
  74.     }
  75.     if (ELSO != NULL) {
  76.         //ekkor van tuti 1 elem, lehet törölni a listát
  77.     }
  78.     getchar();
  79. }
  80.  
  81. int getline(char s[], int lim)
  82. {
  83.     int c, i;
  84.     for (i = 0; i < lim && (c = getchar()) != '\n' && c != EOF; i++)
  85.         s[i] = c;
  86.     s[i] = '\0';
  87.     while (c != '\n' && c != EOF)
  88.         c = getchar();
  89.     return i;
  90. }
  91.  
  92. int betuE(char s[]) {
  93.     int i;
  94.     for (i = 0; s[i] != '\0'; ++i)
  95.         if (!((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')))
  96.             return 0;
  97.     return 1;
  98. }
  99.  
  100. int jonev(char s[]) {
  101.     int i = 0;
  102.     for (i; s[i]; i++) if (!(isalpha(s[i]) || isspace(s[i]))) return 0; //hogy ne engedjen be betut
  103.     i = 0;
  104.     int szokoz = 0;
  105.     int eszokoz = -1;
  106.  
  107.     if (!isupper(s[0]))
  108.         return 0;
  109.  
  110.     while (s[i] != ' ')
  111.         i++;
  112.  
  113.     eszokoz = i;
  114.     szokoz++;
  115.  
  116.     while (s[i] != '\0') {
  117.         if (s[i] == ' ')
  118.             szokoz++;
  119.         i++;
  120.     }
  121.  
  122.     if (szokoz != 1 && !isupper(s[eszokoz + 1]))
  123.         return 0;
  124.     else
  125.         return 1;
  126. }
  127.  
  128. int szame(char s[], int alap) {             //s string ALAP alapú szám-e?
  129.     int i = 0;
  130.     while (s[i] == ' ' || s[i] == '\n' || s[i] == '\t')
  131.         ++i;                //return 0 hozzáadásával kizárhatóak a fehér karakterek
  132.     while (s[i] == '-' || s[i] == '+')
  133.         ++i;
  134.     for (; s[i] != 0; ++i)
  135.         if (!(s[i] >= '0' && s[i] <= alap - 1 + '0'))
  136.             return 0;
  137.     return 1;                   //logikai választ ad vissza
  138. }
  139.  
  140. Listaelem* hozzaad(Listaelem* ELSO, char nev[], int kor) {
  141.     Listaelem* AKT = ELSO;
  142.     Listaelem* ELOZO = NULL;
  143.  
  144.    
  145.     if (AKT == NULL) {
  146.         printf("Elso elem hozzaadasa\n");
  147.         Listaelem* uj = malloc(sizeof(Listaelem));
  148.         elsoelem(uj, nev, kor);
  149.         ELSO = uj;
  150.     }
  151.     else {
  152.         while (AKT != NULL) {
  153.             ELOZO = AKT;
  154.             AKT = AKT->KOV;
  155.         }
  156.         ELOZO->KOV = (Listaelem *)malloc(sizeof(Listaelem));
  157.         AKT = ELOZO->KOV;
  158.         strcpy(AKT->NEV, nev);
  159.         AKT->KOR = kor;
  160.         AKT->KOV = NULL;
  161.     }
  162.     return ELSO;
  163. }
  164.  
  165. void elsoelem(Listaelem* ELSO, char nev[], int kor) {
  166.     ELSO->KOR = kor;
  167.     strcpy(ELSO->NEV, nev);
  168.     ELSO->KOV = NULL;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement