Wątek zablokowany 2014-10-17 09:01 przez dzek69.

Sortowanie danych z pliku

0

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;
}
0

A co dokładnie nie wychodzi.
bezpłatne ogłoszenia dla firm

0

Teraz właśnie zauważyłem, że program się nie da skompilować

Trzeba zamienić linijkę kodu tam gdzie sortujesz wiek

na tą

for (i=0;i<M;i++)
for (j=0;j<M;j++)
{
    if (starsi[i].Wiek>starsi[j].Wiek)
    {
        wiekk=starsi[i].Wiek;
        starsi[i].Wiek=starsi[j].Wiek;
        starsi[j].Wiek=wiekk;
 
    }
} 
0

Też to zauważyłem i poprawiłem, to program się skompilował, lecz wywala błąd, że błąd otwarcia pliku nie wiedzieć czemu ;q (Jak nie urok to sraczka :P)

0

Może popraw char nazwap[]="C:\pliki\osoby.txt"; na char nazwap[]="C:\pliki\osoby.txt";

0

To nie to, u mnie na kompie z dwoma trzeba. Bez sortowania to otwiera i zapisuje dane bez problemu, lecz to sortowanie wszystko psuje, lecz błędu nie wywala, a na oko wygląda w porządku.

0

Dobra, już mam ten problem z głowy, lecz nie powiem czemu nie działało bo wstyd :P Lecz jak to bywa był pierwszy problem, potem drugi to i czas na trzeci nadszedł :D Kompiluje mi teraz, ale nic nie wyświetla, ani w pliku, ani tych komunikatów co są poniżej programu (z tym czyszczeniem i danymi).

1 użytkowników online, w tym zalogowanych: 0, gości: 1