[ mile-bg @ 21.11.2010. 13:32 ] @
Ako ima neko voljan da pomogne oko sledeceg problema:

Cilj mi je da napravim program koji m3u pretvara u pls ili neki drugi.Da bih to ucinio napravio sam klasu numera i od nje niz( numera moja[50]). Svaka numera sadrzi podatke o imenu, nazivu pesme, adresi i trajanju.Nazalost, potrebno je alocirati memoriju za nazive tako da su privatne clanice klase pokazivaci tipa char (char* ImeNumere....).
Kada pokusam da ispisem sadrzaj niza numera preko for petlje program uvek izbacuje poslenji unesen string.
Problem je verovatno kod pokazivaca jer je on na poslednjem.Da li neko mozda ima ideju kako da dodjem do prvog naziva, odnosno kako da ispisem ovaj niz.
Hvala unapred.

[Ovu poruku je menjao mile-bg dana 21.11.2010. u 14:48 GMT+1]
[ X Files @ 21.11.2010. 19:07 ] @
Dao si premalo pravih detalja.

Koje okruzenje/kompajler koristis za razvoj?
(ovo je bitno da bismo znali koje biblioteke gotovih klasa mogu da se koriste, stl, mfc, vcl)

Da li je ovo neki zadatak koga treba da uradis za skolu/faks ili je prosto tvoj neki tvoj projekat?
(ovo je bitno da bismo znali da smeju da se koriste gorepomenute biblioteke ili se treba zadrzati na skolskom nivou: implementacija liste, alokacija, pokazivaci... )

Najbolje pokazi kod (ili problematicni deo) koji si do sada uradio.




Pretpostavljam da su ovo formati o kojima govoris:

PLS
http://en.wikipedia.org/wiki/PLS_(file_format)

M3U
http://en.wikipedia.org/wiki/M3U
[ mile-bg @ 21.11.2010. 19:28 ] @
Program je projekat sa faksa, koriste se formati koje si napomenuo (m3u, pls ).Programiram u Visual Studio2008, okruzenje c++.
Code:

class numera
{
private:
    int trajanje;
    char *ImeNumere;
    char *ImeIzvodjaca;
    char *Adresa;
public:
    void upis(char x[], char y[],char z[],int n)
    {
        
        int r=strlen(x);
        int l=strlen(y);
        int j=strlen(z);
        ImeNumere = (char*) malloc (r+1);
        ImeIzvodjaca = (char*) malloc (l+1);
        Adresa = (char*) malloc (j+1);
        trajanje =n;
        ImeNumere=x;
        ImeIzvodjaca=y;
        Adresa=z;
        
    }
        void ispis()
    {
        
        cout<<trajanje<<endl;
        cout<<ImeNumere<<endl;
        cout<<ImeIzvodjaca<<endl;
        cout<<Adresa<<endl;
    }
};

void main()
{
    int p=0,trajanje;
    char pocetna[20],temp[100],adresa[100],n[9];
    
    numera moja[50];
    
    ifstream ulaz("ulaz.m3u");
    
        ulaz.getline (temp,30);
    
    while(!ulaz.eof())
    {
        ulaz.get(n,9);
        ulaz.get(n,4);          // ovo je samo uzimanje trajanja numere
        trajanje=atoi(n);
        
        ulaz.getline(temp,100);      //ovde bi trebalo odvojiti ime numere od izvodjaca i posebno ih proslediti ali pojednostavio sam radi citljivosti
        
        ulaz.getline(adresa,100);
        
        moja[p].upis(temp,temp,adresa,trajanje);

        p++;
                for(int i=0;i<p;i++) moja[i].ispis();// ovde nastaje problem******

    }


***** Pri izvrsavanju programa na izlazu se ispisuju samo naslovi numera i imena poslednje numere koje su ucitane, dok kod se vremena trajanja menjaju, sto pretpostavljam znaci da je problem oko pokazivaca.Jel znas mozda o cemu se radi?


[Ovu poruku je menjao X Files dana 21.11.2010. u 20:49 GMT+1]
[ X Files @ 21.11.2010. 19:57 ] @
Pogledacu sutra detaljnije... a za sada samo pitanje, zasto ti je ispis smesten UNUTAR while petlje? Zar nisi planirao da ispis (kao provera) ide nakon citanja fajla?

[ Nedeljko @ 21.11.2010. 21:23 ] @
Citat:
mile-bg
Code:
ImeNumere = (char*) malloc (r+1);
// ...
ImeNumere=x;


Druga naredba poništava dejstvo prve (osim što zauzet prostor ostaje zarobljen do kraja izvršavanja programa, tzv. curenje) jer pokazivač ImeNumere pokazuje na adresu na koju pokazuje x i ne pokazuje više na zauzeti prostor funkcijom malloc, koji je bio rezultat te funkcije.

Moja preporuka ti je da koristiš klasu string. Šaljem dva ekvivalentna koda, pa ti vidi šta je lakše.
[ X Files @ 22.11.2010. 06:07 ] @
Evo, Nedeljko se bas potrudio... :)


Takodje se slazem da koristis klasu string, pod uslovom da je dozvoljena, s obzirom na didakticke ciljeve ovog zadatka.
[ mile-bg @ 22.11.2010. 06:51 ] @
@ X FILES
Kod mene je van while-a, zeznuo sam ga kopirao ovde..
Ne moras da se mucis samo je potrebno drugacije alocirati i dodeliti vrednost, kao sto je i Nedeljko napisao, ali hvala na trudu.
@ Nedeljko
Hvala puno covece, prvo resenje ce mi sasvim odgovarati.Pozdrav.