Creative Commons License Foxbond's Repo

/**(c) 2016 Michał (Foxbond) Chraniuk */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>


typedef struct list {
	char nazwisko[40];
	char imie[40];
	char pesel[40];
	char nr[40];
	struct list *next;
}list;

int main() {

	FILE *plik = fopen("dane_litera.txt", "r");
	char linia[200];
	list *rekordy = NULL;
	list *obecny = NULL;
	int count=0;

	while (!feof(plik)) {
		fgets(linia, sizeof(linia), plik);
		if (rekordy == NULL) {
			obecny = malloc(sizeof(list));
			sscanf(linia, "%s %s %s %s", &obecny->nazwisko, &obecny->imie, &obecny->pesel, &obecny->nr);
			obecny->next = NULL;
			rekordy = obecny;
		}
		else {
			obecny->next = malloc(sizeof(list));
			sscanf(linia, "%s %s %s %s", &obecny->next->nazwisko, &obecny->next->imie, &obecny->next->pesel, &obecny->next->nr);
			obecny->next->next = NULL;
			obecny = obecny->next;
		}
		count++;
	}//end feof

	fclose(plik);

	list** tab = malloc(sizeof(list*)*count);
	list* p = rekordy;
	int i = 0;
	while (1) {
		tab[i++] = p;
		if (p->next == NULL) {
			break;
		}

		p = p->next;
	}

	int j, t, tmp;
	for (i = 0; i < count - 1; i++)
	{
		t = i;
		for (j = i + 1; j < count; j++)
		{
			if (strcmp(tab[j]->nazwisko, tab[t]->nazwisko) < 1) t = j;
		}
		tmp = tab[t];
		tab[t] = tab[i];
		tab[i] = tmp;
	}
	
	char nazwa[40];
	printf("Podaj nazwe pliku do ktorego zapisac posortowane rekordy: ");
	scanf("%s", &nazwa);
	plik = fopen(nazwa, "w");
	for (i = 0;i < count;i++) {
		fprintf(plik, "%s %s %s %s\n", tab[i]->nazwisko, tab[i]->imie, tab[i]->pesel, tab[i]->nr);
	}
	
	
	//getch();
	return 0;

}

> Back