/**(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