Advertisement
attilan

Mate1

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