jezyk C,problem

0

Witam,oto zadanko :

Dany jest plik elementowy autorzy.dat, którego poszczególne elementy zawierają następujące informacje o programach emitowanych w pewnej rozgłośni: autor (maksymalnie 50 znaków), tytuł (maksymalnie 50 znaków), czas trwania oraz rodzaj programu (któremu odpowiada pojedynczy znak). Wiemy, że plik może zawierać maksymalnie 250 eleme ntów. a) Stworzyć plik tekstowy autorzy.txt, w którym znajdą się wszystkie informacje z pliku autorzy.dat, zapisane w następujący sposób: Autor1 Rodzaj1 Tytuł1 CzasTrwania1 Autor2 Rodzaj2 Tytuł2 CzasTrwania2 ... Jedna linia pliku ma zatem odpowiadać informacji o pojedynczej audycji. Dane w pliku autorzy.txt mają być posortowane względem autorów, dla kilku takich samych autorów, należy posortować dane względem rodzajów audycji, jeżeli autor i rodzaj audycji są takie same – sortujemy względem nazw audycji. Do sortowania danych wykorzystać funkcję qsort. b) Stworzyć plik tekstowy autorzy_lacznie.txt w którym znajdą się wszyscy autorzy audycji (każdy po razie) oraz łączny czas audycji prowadzonych przez każdego z autorów: Autor1 ŁącznyCzasAutora1 Autor2 ŁącznyCzasAutora2

mam problem z podpunktem b,liczy niepoprawną ilość łącznego czasu oraz w zły sposób zapisuje autorów

#include <stdio.h>
#include <stdlib.h>
#define N 250
typedef struct
{
    char autor[50];
    char tytul[50];
    float czas_trwania;
    char rodzaj;
} Audycja;
typedef struct
{
    char Autor[50];
    float czas_audycji;
} Osoba;
 
 
int comparea(const void* w1,const void* w2)
{
    const Audycja*tab1=(Audycja*)w1;
    const Audycja*tab2=(Audycja*)w2;
    if(strcmp(tab1->autor,tab2->autor)!=0)return strcmp(tab1->autor,tab2->autor);//jezeli sa ro¿ni autorzy to sortuj wed³ug autorów
    if((tab1->rodzaj-tab2->rodzaj)!=0)return tab1->rodzaj-tab2->rodzaj;//je¿eli s¹ tacy sami autorzy to sortuj wed³ug rodzaju
    return strcmp(tab1->tytul,tab2->tytul);//je¿eli jest taki sam rodzaj to soruj wedlug tytu³u
 
}
int main()
{
    Audycja tab[N];
    FILE * plik=fopen("autorzy.dat","rb");
    int licznik=0;
    while(fread(&tab[licznik],sizeof(Audycja),1,plik))
    {
        licznik++;
    }
    fclose(plik);
    qsort(tab,licznik,sizeof(Audycja),comparea);
    FILE * plik1=fopen("autorzy.txt","w");
    int i;
    for(i=0; i<licznik; i++)
    {
        fprintf(plik,"%s %s %f %c \n",tab[i].autor,tab[i].tytul,tab[i].czas_trwania,tab[i].rodzaj);
    }
 
    FILE * plik3=fopen("autorzy_lacznie.txt","w");
 
 
    Osoba tab1[licznik];
 
    int ile=0;
    for(i=0; i<licznik; i++)
    {
        if(strcmp(tab[i].autor,tab[i+1].autor)==0 && strcmp(tab1[i].Autor,tab[i].autor)!=0)
 
        {
            ile++;
            strcpy(tab1[i].Autor,tab[i].autor);//kopiuje lancuch znakow to tablicy znakow
            tab1[i].czas_audycji+=tab[i].czas_trwania;
 
        }
    }
 
 
 
    for(i=0; i<ile; i++)
    {
        fprintf(plik3,"%s %f \n",tab1[i].Autor,tab1[i].czas_audycji);
    }
 
 
 
 
 
 
 
 
    return 0;
}
0

"oraz w zły sposób zapisuje autorów"

Byłeś z tym u księdza? Zło czai się wszędzie.

A tak na serio - opisz symptomy zanim ludzie zaczną to kompilować i testować z plikiem którego nie załączyłeś.

0

oto plik,dzięki za uwagę

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