Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<locale.h>
- #include<Windows.h>
- #include<time.h>
- #define MAX 255
- #define MAXADAT 20
- #define MINADAT 1
- typedef struct Dinstruktura {
- char IP[MAX];
- char MASK[MAX];
- int ID;
- }dinstr;
- typedef struct Lista {
- char IP[MAX];
- char MASK[MAX];
- int ID;
- struct Lista* KOV;
- }Listaelem;
- int getline(char s[], int lim);
- int szame(char s[], int alap);
- dinstr* dinbeolvas(const char *fajlnev, int adatokszama);
- void dinkkiir(dinstr* ptr);
- void dinfkiir(dinstr* ptr, char* fnev, int adatszam);
- void beolvasListabaRendezetlen(char fajlnev[], Listaelem *ELSO);
- void elsoelem(Listaelem* ELSO, char buffer[]);
- void vegere(Listaelem* ELSO, char buffer[]);
- void fajlbairas(Listaelem* ELSO, char fajlnev[]);
- void kiiratas(Listaelem *ELSO);
- void egeszlistatorlese(Listaelem* ELSO);
- void main() {
- clock_t start;
- clock_t end;
- double futasido;
- int adatokszama;
- int tenylegesadat = 0;
- int ok = 3;
- char INP[MAX + 1] = "\0";
- char* fnevbe = "IP.txt";
- char* fnevki = "IPKI.txt";
- char* fnevkill = "IPKILL.txt";
- dinstr* ptr = NULL;
- Listaelem* ELSO = (Listaelem*)malloc(sizeof(Listaelem));
- setlocale(LC_ALL, "");
- start = clock();
- SetConsoleCP(1250);
- SetConsoleOutputCP(1250);
- printf("Beolvasás dinamikus struktúrába és láncolt listába.\n");
- printf("Maximum 3 próbálkozás van az adatszám megadására!\n");
- printf("Az adatok számának %d és %d közé kell esnie!\n", MINADAT, MAXADAT);
- printf("Kilépés a ""Vége"" szöveg beírásával lehetséges.\n\n");
- do {
- printf("\nKérem adja meg hány adatra kell felkészülni: ");
- if (!getline(INP, MAX)) {
- printf("Nem adhat meg üres sort!\n");
- ok--;
- printf("Hátralévő próbálkozások száma: %d\n", ok);
- }
- else if (!strcmp(INP, "Vége")) {
- printf("Bekérés megszakítva.\n");
- printf("Az adatok láncolt listában lesznek tárolva.\n");
- ok = 4;
- }
- else if (!szame(INP, 10)) {
- printf("Nem számot adott meg!\n");
- ok--;
- printf("Hátralévő próbálkozások száma: %d\n", ok);
- }
- else if (((adatokszama = atoi(INP)) < MINADAT) || (adatokszama > MAXADAT)) {
- printf("Az adatok számának %d és %d közé kell esnie!\n", MINADAT, MAXADAT);
- ok--;
- printf("Hátralévő próbálkozások száma: %d\n", ok);
- }
- else {
- ptr = dinbeolvas(fnevbe, &tenylegesadat);
- ok = 5;
- }
- } while (ok < 3 && ok > 0);
- printf("Tényleges adat: %d\n", tenylegesadat);
- if (tenylegesadat>0) {
- if (ok == 5) {
- system("cls");
- printf("A tárolás dinamikus struktúrába megtörtént.\n");
- ok = 0;
- do {
- printf("(K)épernyőre szeretné kiíratni a tartalmat, (F)ájlba vagy (M)indkettőbe: ");
- if (!getline(INP, MAX)) {
- printf("Nem adhat meg üres sort!\n");
- }
- else if (!strcmp(INP, "K")) {
- printf("Képernyőre kiiratás következik:\n\n");
- dinkkiir(ptr, tenylegesadat);
- ok = 1;
- }
- else if (!strcmp(INP, "F")) {
- printf("Fájlba kiiratás következik:\n");
- dinfkiir(ptr, fnevki, tenylegesadat);
- ok = 1;
- }
- else if (!strcmp(INP, "M")) {
- printf("Fájlba és képernyőre kiiratás következik:\n");
- dinkkiir(ptr, tenylegesadat);
- dinfkiir(ptr, fnevki, tenylegesadat);
- ok = 1;
- }
- else {
- printf("Hibás paraméter!\n");
- }
- } while (!ok);
- free(ptr);
- }
- else {
- system("cls");
- printf("Dinamikus struktúrában való tárolás sikertelen!\n");
- }
- printf("\nLáncolt listában történő tárolás következik.\n\n");
- beolvasListabaRendezetlen(fnevbe, ELSO);
- if (ELSO) {
- ok = 0;
- do {
- printf("\n(K)épernyőre szeretné kiíratni a tartalmat, (F)ájlba vagy (M)indkettőbe: ");
- if (!getline(INP, MAX)) {
- printf("Nem adhat meg üres sort!\n");
- }
- else if (!strcmp(INP, "K")) {
- printf("Képernyőre kiiratás következik:\n\n");
- kiiratas(ELSO);
- ok = 1;
- }
- else if (!strcmp(INP, "F")) {
- printf("Fájlba kiiratás következik:\n");
- fajlbairas(ELSO, fnevkill);
- ok = 1;
- }
- else if (!strcmp(INP, "M")) {
- printf("Fájlba és képernyőre kiiratás következik:\n");
- kiiratas(ELSO);
- fajlbairas(ELSO, fnevkill);
- ok = 1;
- }
- else {
- printf("Hibás paraméter!\n");
- }
- } while (!ok);
- egeszlistatorlese(ELSO);
- }
- else {
- system("cls");
- printf("Láncolt listában való tárolás sikertelen!\n");
- }
- }
- else printf("Nincs elegendő adat!\n");
- end = clock();
- futasido = ((double)(end - start)) / CLOCKS_PER_SEC;
- printf("\nA futásidő: %0.2lf másodperc.\n", futasido);
- printf("Billentyűleütésre a program kilép.");
- getchar();
- }
- int getline(char s[], int lim)
- {
- int c, i;
- for (i = 0; i < lim && (c = getchar()) != '\n' && c != EOF; i++)
- s[i] = c;
- s[i] = '\0';
- while (c != '\n' && c != EOF)
- 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
- return 0;
- }
- while (s[i] == '-' || s[i] == '+')
- ++i;
- for (; s[i] != 0; ++i)
- if (!(s[i] >= '0' && s[i] <= alap - 1 + '0'))
- return 0;
- return 1;
- }
- dinstr* dinbeolvas(const char *fajlnev, int* tenylegesadat) {
- FILE* f = fopen(fajlnev, "r");
- dinstr* ptr;
- char buf[MAX];
- int sorokszama = 0;
- int hossz = 0;
- int i = 0;
- int futas = 0;
- char* token;
- if (f) {
- while (fgets(buf, sizeof(buf), f)) {
- sorokszama++;
- }
- *tenylegesadat = sorokszama;
- rewind(f);
- ptr = (dinstr*)malloc(sizeof(dinstr) * sorokszama);
- while (fgets(buf, sizeof(buf), f)) {
- hossz = strlen(buf) - 1;
- if (buf[hossz == '\n'])
- buf[hossz] = '\0';
- token = strtok(buf, "\t");
- while (token) {
- if (futas == 0)
- strcpy((ptr + i)->IP, token);
- else if (futas == 1)
- strcpy((ptr + i)->MASK, token);
- else
- (ptr + i)->ID = atoi(token);
- futas++;
- token = strtok(NULL, "\t");
- }
- futas = 0;
- i++;
- }
- fclose(f);
- return ptr;
- }
- else
- printf("Fájlolvasás hiba!\n");
- }
- void dinkkiir(dinstr* ptr, int adatszam) {
- int i = 0;
- for (i; i < adatszam; i++) {
- printf("IP cím: %s\n", (ptr + i)->IP);
- printf("Alhálózati maszk: %s\n", (ptr + i)->MASK);
- printf("Azonosító: %d\n", (ptr + i)->ID);
- printf("\n");
- }
- printf("Képernyőre kiíratás kész.\n");
- }
- void dinfkiir(dinstr* ptr, char* fnev, int adatszam) {
- FILE* f = fopen(fnev, "w+");
- int i = 0;
- if (f) {
- for (i; i < adatszam; i++) {
- fprintf(f, "IP cím: %s\n", (ptr + i)->IP);
- fprintf(f, "Alhálózati maszk: %s\n", (ptr + i)->MASK);
- fprintf(f, "Azonosító: %d\n", (ptr + i)->ID);
- fprintf(f, "\n");
- }
- fclose(f);
- printf("Fájlba iratás kész.\n");
- }
- else
- printf("Fájlba írás hiba!\n");
- }
- void beolvasListabaRendezetlen(char fajlnev[], Listaelem *ELSO) {
- FILE *f = fopen(fajlnev, "r");
- char buffer[256];
- int futas = 0;
- int hossz = 0;
- if (f) {
- while (fgets(buffer, sizeof buffer, f)) {
- hossz = strlen(buffer);
- if (buffer[hossz - 1] == '\n')
- buffer[hossz - 1] = '\0';
- if (futas == 0) {
- elsoelem(ELSO, buffer);
- futas++;
- }
- else vegere(ELSO, buffer);
- }
- printf("Láncolt listába írás kész.\n");
- fclose(f);
- }
- else
- printf("Listába írás hiba!\n");
- }
- void elsoelem(Listaelem* ELSO, char buffer[]) {
- char* token;
- int ugras = 0;
- token = strtok(buffer, "\t");
- while (token != NULL) {
- if (ugras == 0)
- strcpy(ELSO->IP, token);
- else if (ugras == 1)
- strcpy(ELSO->MASK, token);
- else {
- ELSO->ID = atoi(token);
- ELSO->KOV = NULL;
- }
- ugras++;
- token = strtok(NULL, "\t");
- }
- }
- void vegere(Listaelem* ELSO, char buffer[]) {
- char* token;
- int ugras = 0;
- Listaelem* AKT = ELSO;
- Listaelem* ELOZO = NULL;
- token = strtok(buffer, "\t");
- while (AKT != NULL) {
- ELOZO = AKT;
- AKT = AKT->KOV;
- }
- ELOZO->KOV = (Listaelem *)malloc(sizeof(Listaelem));
- AKT = ELOZO->KOV;
- while (token != NULL) {
- if (ugras == 0)
- strcpy(AKT->IP, token);
- else if (ugras == 1)
- strcpy(AKT->MASK, token);
- else {
- AKT->ID = atoi(token);
- AKT->KOV = NULL;
- }
- ugras++;
- token = strtok(NULL, "\t");
- }
- }
- void fajlbairas(Listaelem* ELSO, char fajlnev[]) {
- FILE *f = fopen(fajlnev, "w+");
- if (f == NULL) {
- printf("Fájlba írás hiba!\n");
- getchar();
- }
- else {
- Listaelem* AKT = ELSO;
- if (AKT == NULL)
- fprintf(f, "A lista üres!\n");
- else {
- while (AKT != NULL) {
- fprintf(f, "IP cím: %s\n", AKT->IP);
- fprintf(f, "Alhálózati maszk: %s\n", AKT->MASK);
- fprintf(f, "Azonosító: %d\n", AKT->ID);
- fprintf(f, "\n");
- AKT = AKT->KOV;
- }
- }
- fclose(f);
- printf("Fájlba írás kész.\n");
- }
- }
- void kiiratas(Listaelem *ELSO) {
- Listaelem *AKT = ELSO;
- if (AKT == NULL)
- printf("A lista üres.\n");
- else {
- while (AKT != NULL) {
- printf("IP cím: %s\n", AKT->IP);
- printf("Alhálózati maszk: %s\n", AKT->MASK);
- printf("Azonosító: %d\n", AKT->ID);
- printf("\n");
- AKT = AKT->KOV;
- }
- }
- printf("Képernyőre kiiratás kész.\n");
- }
- void egeszlistatorlese(Listaelem* ELSO) {
- Listaelem* tmp;
- Listaelem* AKT = ELSO;
- while (AKT) {
- tmp = AKT;
- AKT = AKT->KOV;
- free(tmp);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement