Referencia na FILE* ? // C

Programovacie jazyky, rady, poradňa...
Birky22
Amateur
Amateur
Príspevky: 19
Registrovaný: 26 mar 2011, 13:48

Referencia na FILE* ? // C

Príspevok od používateľa Birky22 »

Nazdar, asi referencia na ukazovateľ neexistuje, čiže nespravím referenciu na premennú typu FILE*?! Ak náhodou áno, tak ako nato?
No ale ja potrebujem vyriešiť nasledovný problém.

Budem mat 2 funckie, ak zavolam jednu, otvori sa mi subor a vykonaju sa dalsie prikazy.
Ak zavolam druhu, tak ak ten subor sa uz v tej prvej otvoril, tak to vykona nejake prikazy ak nie, cize este ta prva funkcia nebola vobec zavolana, subor nebol otvoreny, tak sa nic nevykona. Toto by som chcel vyriesit bez globalnych premennych. Chcel som to spravit s refenciami, lenze je to problematicke, kedze sa hram s ukazovatelmi a nie s jednoduchymi premennymi.

Pre lepsie znazornenie:

Kód: Vybrať všetko

#include<stdio.h>

void prvaFcia(FILE &f)
{
     f = fopen("subor.txt","r");
     ...
}

void druhaFcia(FILE &f)
{
     if(f != NULL)
    {
     ...
    }
}

int main()
{
   FILE *file;
   prvaFcia(file);
   druhaFcia(file);

return 0;
}
Viem ze ten program je nefunkcny, len aby ste vedeli, ze k comu sa chcem docielit a ak sa to pomocou refenrcie neda, tak ako by sa to este dalo spravit?
Vopred dakujem za kazdy prispevok.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Referencia na FILE* ? // C

Príspevok od používateľa BX »

Z popisu by som to skúsil nasledovne:

Kód: Vybrať všetko

void fce1(FILE * f, int * otv)
{
 ...
 *otv = 1;
}

int main(void)
{
 int otvorene = 0;
 FILE * file;
 fce1(file, &otvorene);

 if(otvorene) fce2(file);

 return 0;
}
Prípadne ak chceš fce2 každopádne volať a testovať to v nej, daj jej tiež otvorene ako parameter.
Tak?
Birky22
Amateur
Amateur
Príspevky: 19
Registrovaný: 26 mar 2011, 13:48

Re: Referencia na FILE* ? // C

Príspevok od používateľa Birky22 »

No v tej tvojej verzii je tam to file aj f v parametroch funkcii zbytočná, keďže f ukazuje na file, ale hneď jak otvorý súbor už ukazuje na ten súbor a s file už nemá nič spoločné. Btw vyriešil som to nápodobne s boolovou premennou, ku ktorej som robil refenciu, ale stále rozmýšlam ako by sa to dalo srpaviť s tým FILE referenciou. Jak dosiahnúť aby ten file ukazoval na adresu toho súboru, ktorá sa získa v tek prvej funkcii?! Neexistuje nejaká premenná, ktorej hodnota je ukazovateľ? :D ja už v tom mám guláš

//autoeditácia príspevku (03 Nov 2011, 19:43)
Vyriešené :)

Kód: Vybrať všetko

#include<stdio.h>

void prvaFcia(FILE **f)
{
     *f = fopen("subor.txt","r");
     ...
}

void druhaFcia(FILE **f)
{
     if(*f != NULL)
    {
     ...
    }
}

int main()
{
   FILE *file;
   prvaFcia(file);
   druhaFcia(file);

return 0;
}
Ukazovatel na ukazovatel som už skúšal aj predtým, ale nefungovalo mi to, lebo som používal f = fopen() namiesto *f = fopen()
Napísať odpoveď