Witam. Chciałbym posegregować poniższy program po wieku, lecz mi delikatnie mówiąc nie wychodzi, tak więc zwracam się do Was o pomoc.
#include <stdio.h>
#include <stdlib.h>
#define N 50
#define M 100
typedef struct
{
char Imie[50];
char Nazwisko[50];
int Wiek;
} LUDZIE;
int main()
{
int i,j;
char nazwap[]="C:\\pliki\\osoby.txt";
LUDZIE starsi[5]={{"Jan","Kowalski",80},{"Karol","Kozlowski",67},{"Piotr","Jazwinski",19},{"Pawel","Jazwinski",91},{"Maria","Szyd³owska",100}};
FILE *fp;
if((fp=fopen(nazwap,"r+"))==NULL)
{
printf("Blad otwarcia pliku\n");
exit(1);
}
i=0;
int wiekk;
for (i=0;i<M;i++)
for (j=0;j<M;j++)
{
if (starsi[i].Wiek>starsi[j].Wiek)
{
wiekk=starsi[i];
starsi[i]=starsi[j];
starsi[j]=wiekk;
}
}
// przechodzimy na koniec pliku
if(fseek(fp, 0, SEEK_END))
{
printf("Blad przy zmianie pozycji w pliku !\n");
fclose(fp);
return 1;
}
// pobieramy pozycje (poniewaz jestesmy na koncu pliku to pozycja jest
// rowna dlugosci pliku)
int pozycja;
pozycja=ftell(fp);
if(pozycja == -1)
{
printf("Blad przy odczycie pozycji w pliku !\n");
fclose(fp);
return 1;
}
// zapisujemy dane do pliku
if(fwrite(starsi, sizeof(LUDZIE), 5, fp) != 5)
{
printf("Blad przy zapisie danych do pliku !\n");
fclose(fp);
return 1;
}
// przechodzimy do miejsca, w ktorym bylismy przed zapisem
if(fseek(fp, pozycja, SEEK_SET)) {
printf("Blad przy zmianie pozycji w pliku !\n");
fclose(fp);
return 1;
}
// czyscimy tablice z pracownikami
memset(starsi, 0, sizeof(LUDZIE)*5);
// wyswietlamy dane, aby sprawdzic czy zostaly poprawnie wyczyszczone
printf("Dane po wyczyszczeniu:\n");
for(i=0; i<5; i++)
printf("Imie : %s, Nazwisko: %s, Wiek: %d\n", starsi[i].Imie, starsi[i].Nazwisko, starsi[i].Wiek);
printf("\n");
// odczytujemy dane z pliku
if(fread(starsi, sizeof(LUDZIE), 5, fp) != 5)
{
printf("Blad przy odczycie danych z pliku !\n");
fclose(fp);
return 1;
}
// wyswietlamy dane, by sprawdzic czy zostaly poprawnie zapisane i odczytane
printf("Odczytane dane:\n");
for(i=0; i<5; i++)
printf("Imie: %s, Nazwisko: %s, Wiek: %d\n", starsi[i].Imie, starsi[i].Nazwisko, starsi[i].Wiek);
fclose(fp);
return 0;
}