Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<ctype.h>
- #define MAX 255
- #define MAXNEV 50
- #define TRUE 1
- typedef struct Lista {
- char NEV[MAX + 1];
- int KOR;
- struct Lista *KOV;
- } Listaelem;
- int getline(char s[], int lim);
- int szame(char s[], int alap);
- void elsoelem(Listaelem* ELSO, char nev[], int kor);
- Listaelem* hozzaad(Listaelem* ELSO, char nev[], int kor);
- int ellenorzes(const char s[]);
- void main() {
- Listaelem *ELSO;
- char NEVINP[MAX + 1];
- char KORINP[MAX + 1];
- int sorsz = 0;
- int kor1 = 0;
- ELSO = NULL;
- int ok1, ok2;
- do {
- ok1 = 0;
- ok2 = 0;
- printf("Kerem adja meg a %d. nevet: ", sorsz + 1);
- if (!getline(NEVINP, MAX)) {
- printf("\nBeolvasas vege.\n");
- ok1 = 1;
- }
- else if (!ellenorzes(NEVINP)) {
- printf("Adja meg ujra a nevet!\n");
- }
- else
- do {
- printf("Kerem adja meg a %d. nevhez tartozo eletkort: ", sorsz + 1);
- if (!getline(KORINP, MAX)) {
- printf("Bekeres vege.\n");
- ok2 = 1;
- ok1 = 1;
- }
- else if (!(kor1 = szame(KORINP, 10))) {
- printf("A kor csak szam lehet!\n");
- }
- else if (kor1 <= 0) printf("A kor 0-nal nagyobb lehet csak!\n");
- else {
- ELSO = hozzaad(ELSO, NEVINP, kor1);
- sorsz++;
- ok2 = TRUE;
- }
- } while (!ok2);
- } while (!ok1);
- printf("Siker.");
- if (ELSO != NULL) {
- //ekkor van tuti 1 elem, lehet törölni a listát
- }
- getchar();
- }
- int ellenorzes(const char s[]) {
- //1. nagy betűvel kezdődik?
- if (islower(s[0])) {
- printf("A nev nem nagy betuvel kezdodik!\n");
- return 0;
- }
- //2. van benne szam?
- int i = 0, szokozdb = 0;
- for (i; s[i]; i++) {
- if (!(isalpha(s[i]) || isspace(s[i]))) {
- printf("Nem csak betut tartalmaz!\n");
- return 0;
- }
- if (s[i] == ' ') szokozdb++;
- if (szokozdb > 1) {
- printf("Tul sok szokoz!\n");
- return 0;
- }
- }
- if (szokozdb != 1) {
- printf("Nincs szokoz!\n");
- 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
- }
- if (strlen(s) > 50) return 0; //hossz
- i = 0;
- //3. szóköz után nagybetű van? szóköz keresése mehet, nem lesz végtelen ciklus mert az előző
- //lépésben biztossá vált hogy van szóköz és csak 1 db van
- for (i; s[i] != ' '; i++); //üres for, csak elléptetjük a szóközig
- int szokozpoz = i; //még kelleni fog a szóköz poziciója
- if (islower(s[++i])) {
- printf("A szokoz utani karakter nem nagybetu!\n");
- return 0;
- }
- i = 1;
- //4. Első betű után kicsi a többi a szóközig?
- for (i; s[i] != ' '; i++) {
- if (isupper(s[i])) {
- printf("A kezdobetu utani karakterek nem kisbetuk!\n");
- return 0;
- }
- }
- //5. Szóköz utáni első betű nagy, de a többi kicsi?
- szokozpoz += 2;
- for (szokozpoz; s[szokozpoz]; szokozpoz++) {
- if (isupper(s[szokozpoz])) {
- printf("A keresztnev kezdobetuje utan nem kisbetuk vannak!\n");
- return 0;
- }
- }
- return 1;
- }
- int getline(char s[], int lim) {
- int i, c;
- for (i = 0; i<lim && (c = getchar()) != EOF && c != '\n'; ++i) s[i] = c;
- s[i] = '\0';
- while (c != EOF && c != '\n') c = getchar();
- return i;
- }
- int szame(char s[], int alap) { //s string ALAP alapú szám-e?
- int i = 0;
- while (s[i] == ' ' || s[i] == '\n' || s[i] == '\t')
- ++i; //return 0 hozzáadásával kizárhatóak a fehér karakterek
- while (s[i] == '-' || s[i] == '+')
- ++i;
- for (; s[i] != 0; ++i)
- if (!(s[i] >= '0' && s[i] <= alap - 1 + '0'))
- return 0;
- return atoi(s); //visszaadja a szamát
- }
- Listaelem* hozzaad(Listaelem* ELSO, char nev[], int kor) {
- Listaelem* AKT = ELSO;
- Listaelem* ELOZO = NULL;
- if (AKT == NULL) {
- printf("Elso elem hozzaadasa\n");
- Listaelem* uj = malloc(sizeof(Listaelem));
- elsoelem(uj, nev, kor);
- ELSO = uj;
- }
- else {
- while (AKT != NULL) {
- ELOZO = AKT;
- AKT = AKT->KOV;
- }
- ELOZO->KOV = (Listaelem *)malloc(sizeof(Listaelem));
- AKT = ELOZO->KOV;
- strcpy(AKT->NEV, nev);
- AKT->KOR = kor;
- AKT->KOV = NULL;
- }
- return ELSO;
- }
- void elsoelem(Listaelem* ELSO, char nev[], int kor) {
- ELSO->KOR = kor;
- strcpy(ELSO->NEV, nev);
- ELSO->KOV = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement