[C] Prenos textového súboru medzi funkciami

Programovacie jazyky, rady, poradňa...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

[C] Prenos textového súboru medzi funkciami

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

Ahojte, povedzme, že mám program v C-čku, ktorý sa skladá z Main-u a asi piatich funkcií.

Potrebujem dosiahnuť to, že ten súbor otvorím iba v jednej funkcii, a v ostatných nie. Ak funkcia na otvorenie súboru teda ešte nebola spustená, ostatné funkcie nepracujú, v opačnom prípade môžu plnohodnotne pracovať so súborom.

Googlim, hľadám, snažím sa, ale nič. Pomôžete? Vďaka. :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: [C] Prenos textového súboru medzi funkciami

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

A ten súbor máš ako globálnu premenú, či ako? A bavíme sa o type FILE*, áno?
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: [C] Prenos textového súboru medzi funkciami

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

Áno, bavíme sa o .txt súboru FILE *.

Momentálne je definovaný globálne a otváraný v jednej funkcii, no neviem ako ho vyniesť von - naspäť do mainu, už otvorený, a potom s ním pracovať v inej funkcii.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: [C] Prenos textového súboru medzi funkciami

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

FILE* je pointer na file handle, takže ak ho raz otvoríš, bude otvorený. Takže ak ho inicializuješ na NULL a potom ho raz niekde otvoríš, bude vytvorený a nebude NULL. V ostatných funkciách tak môžeš kontrolovať práve toto.
A môžeš si to kľudne posielať ako parameter funkcie, alebo si ho aj vrátiť v návratovej hodnote, je to predsa pointer.
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: [C] Prenos textového súboru medzi funkciami

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

Hmm, v základe to mám takto:

Kód: Vybrať všetko

// globálne premenné
FILE *f;

// funkcia na otvorenie suboru
FILE funkcia1(){
        ...
	f=fopen(subor,"r");  // fclose je na konci main-u
        ...
	return *f;
}

// ina funkcia, v ktorej chcem so suborom pracovat
int funkcia2(FILE *f){
	
	char c;
	
	while((c=fgetc(f)) != EOF){
		putchar('*');
	}

	return 0;
}
Druhá funkcia by teda teoreticky mala vypisovať hviezdičky pre každý znak v súbore, no nerobí nič. Akoby súbor otvorený nebol. Kde je problém?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: [C] Prenos textového súboru medzi funkciami

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

FILE nikdy nedereferencuj, vždy každá funkcia pracuje s pointrom. Pozri sa poriadne ešte raz na to, čo to ten FILE* vlastne je.
Uprav si to takto

Kód: Vybrať všetko

FILE *f = NULL;

FILE * funkcia1(){
   return f = fopen("subor","r");
}
Pri úspešne otvorenom súbore f nebude NULL a to môžeš využívať.

A ak chceš mať f ako globálnu premennú, tak ju maj a nemusíš ju predávať ako parameter.
Ideálne ju ale vytvor v maine a funkciám ju dávaj ako parameter. Teraz tieto dve veci podivne miešaš.
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

Re: [C] Prenos textového súboru medzi funkciami

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

Rozumiem, už to dáva zmysel. :) Vďaka. :plus:
Napísať odpoveď