Advertisement
attilan

Mate1_c

Apr 21st, 2018
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.10 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 szame(char s[], int alap);
  18. void elsoelem(Listaelem* ELSO, char nev[], int kor);
  19. Listaelem* hozzaad(Listaelem* ELSO, char nev[], int kor);
  20. int ellenorzes(const char s[]);
  21.  
  22.  
  23. void main() {
  24.     Listaelem *ELSO;
  25.     char NEVINP[MAX + 1];
  26.     char KORINP[MAX + 1];
  27.     int sorsz = 0;
  28.     int kor1 = 0;
  29.  
  30.     ELSO = NULL;
  31.     int ok1, ok2;
  32.     do {
  33.         ok1 = 0;
  34.         ok2 = 0;
  35.         printf("Kerem adja meg a %d. nevet: ", sorsz + 1);
  36.         if (!getline(NEVINP, MAX)) {
  37.             printf("\nBeolvasas vege.\n");
  38.             ok1 = 1;
  39.         }
  40.         else if (!ellenorzes(NEVINP)) {
  41.             printf("Adja meg ujra a nevet!\n");
  42.         }
  43.         else
  44.             do {
  45.                 printf("Kerem adja meg a %d. nevhez tartozo eletkort: ", sorsz + 1);
  46.                 if (!getline(KORINP, MAX)) {
  47.                     printf("Bekeres vege.\n");
  48.                     ok2 = 1;
  49.                     ok1 = 1;
  50.                 }
  51.                 else if (!(kor1 = szame(KORINP, 10))) {
  52.                     printf("A kor csak szam lehet!\n");
  53.                 }
  54.                 else if (kor1 <= 0) printf("A kor 0-nal nagyobb lehet csak!\n");
  55.                 else {
  56.                     ELSO = hozzaad(ELSO, NEVINP, kor1);
  57.                     sorsz++;
  58.                     ok2 = TRUE;
  59.                 }
  60.             } while (!ok2);
  61.     } while (!ok1);
  62.  
  63.     printf("Siker.");
  64.     if (ELSO != NULL) {
  65.         //ekkor van tuti 1 elem, lehet törölni a listát
  66.     }
  67.     getchar();
  68. }
  69.  
  70. int ellenorzes(const char s[]) {
  71.     //1. nagy betűvel kezdődik?
  72.     if (islower(s[0])) {
  73.         printf("A nev nem nagy betuvel kezdodik!\n");
  74.         return 0;
  75.     }
  76.     //2. van benne szam?
  77.     int i = 0, szokozdb = 0;
  78.     for (i; s[i]; i++) {
  79.         if (!(isalpha(s[i]) || isspace(s[i]))) {
  80.             printf("Nem csak betut tartalmaz!\n");
  81.             return 0;
  82.         }
  83.         if (s[i] == ' ') szokozdb++;
  84.         if (szokozdb > 1) {
  85.             printf("Tul sok szokoz!\n");
  86.             return 0;
  87.         }
  88.     }
  89.     if (szokozdb != 1) {
  90.         printf("Nincs szokoz!\n");
  91.         return 0; //ez azért kell mert az előző lépés csak azt csekkolta >1, de ettőtől még 0 is lehet
  92.     }
  93.     if (strlen(s) > 50) return 0; //hossz
  94.     i = 0;
  95.     //3. szóköz után nagybetű van? szóköz keresése mehet, nem lesz végtelen ciklus mert az előző
  96.     //lépésben biztossá vált hogy van szóköz és csak 1 db van
  97.     for (i; s[i] != ' '; i++); //üres for, csak elléptetjük a szóközig
  98.     int szokozpoz = i; //még kelleni fog a szóköz poziciója
  99.     if (islower(s[++i])) {
  100.         printf("A szokoz utani karakter nem nagybetu!\n");
  101.         return 0;
  102.     }
  103.     i = 1;
  104.     //4. Első betű után kicsi a többi a szóközig?
  105.     for (i; s[i] != ' '; i++) {
  106.         if (isupper(s[i])) {
  107.             printf("A kezdobetu utani karakterek nem kisbetuk!\n");
  108.             return 0;
  109.         }
  110.     }
  111.     //5. Szóköz utáni első betű nagy, de a többi kicsi?
  112.     szokozpoz += 2;
  113.     for (szokozpoz; s[szokozpoz]; szokozpoz++) {
  114.         if (isupper(s[szokozpoz])) {
  115.             printf("A keresztnev kezdobetuje utan nem kisbetuk vannak!\n");
  116.             return 0;
  117.         }
  118.     }
  119.     return 1;
  120. }
  121.  
  122. int getline(char s[], int lim) {
  123.     int i, c;
  124.     for (i = 0; i<lim && (c = getchar()) != EOF && c != '\n'; ++i) s[i] = c;
  125.     s[i] = '\0';
  126.     while (c != EOF && c != '\n') c = getchar();
  127.     return i;
  128. }
  129.  
  130. int szame(char s[], int alap) {             //s string ALAP alapú szám-e?
  131.     int i = 0;
  132.     while (s[i] == ' ' || s[i] == '\n' || s[i] == '\t')
  133.         ++i;                //return 0 hozzáadásával kizárhatóak a fehér karakterek
  134.     while (s[i] == '-' || s[i] == '+')
  135.         ++i;
  136.     for (; s[i] != 0; ++i)
  137.         if (!(s[i] >= '0' && s[i] <= alap - 1 + '0'))
  138.             return 0;
  139.     return atoi(s);                 //visszaadja a szamát
  140. }
  141.  
  142. Listaelem* hozzaad(Listaelem* ELSO, char nev[], int kor) {
  143.     Listaelem* AKT = ELSO;
  144.     Listaelem* ELOZO = NULL;
  145.  
  146.    
  147.     if (AKT == NULL) {
  148.         printf("Elso elem hozzaadasa\n");
  149.         Listaelem* uj = malloc(sizeof(Listaelem));
  150.         elsoelem(uj, nev, kor);
  151.         ELSO = uj;
  152.     }
  153.     else {
  154.         while (AKT != NULL) {
  155.             ELOZO = AKT;
  156.             AKT = AKT->KOV;
  157.         }
  158.         ELOZO->KOV = (Listaelem *)malloc(sizeof(Listaelem));
  159.         AKT = ELOZO->KOV;
  160.         strcpy(AKT->NEV, nev);
  161.         AKT->KOR = kor;
  162.         AKT->KOV = NULL;
  163.     }
  164.     return ELSO;
  165. }
  166.  
  167. void elsoelem(Listaelem* ELSO, char nev[], int kor) {
  168.     ELSO->KOR = kor;
  169.     strcpy(ELSO->NEV, nev);
  170.     ELSO->KOV = NULL;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement