fclose()

Programovacie jazyky, rady, poradňa...
Jygsaw
Amateur
Amateur
Príspevky: 24
Registrovaný: 06 mar 2009, 14:40

fclose()

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

Prajem pekný deň,
mám taký problém, že nechápem tomuto príkazu, keď ho použijem pri if. Mám takýto kód:

Kód: Vybrať všetko

#include <stdio.h>
int main() {
           FILE *fr;
           
           if (fr = fopen("PISMENA.TXT", "r")) {
              printf("Subor sa podarilo otvorit.\n");
              }
           else {
              printf("Subor sa nepodarilo otvorit.\n");
              return 1;
              }
              
           if (fclose(fr))
              printf("Subor sa podarilo zavriet.\n");
           else {
              printf("Subor sa nepodarilo zavriet.\n");
              return 1;
              }
              
           getchar();
           
           
           }
Ak sa subor zavrie tak to vypíše "Subor sa nepodarilo zavriet." namiesto "Subor sa podarilo zavriet.".
Nefunguje to nejak blbo? Veď predsa, ak podmienka pravdivá nie je tak sa vykonajú prikazy za else a nie pred. Možno tomu nejak zle chápem...

PS: V C začínam.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

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

http://www.cppreference.com/wiki/c/io/fclose
The function fclose() closes the given file stream, deallocating any buffers associated with that stream. fclose() returns 0 upon success, and EOF otherwise.
ak sa podarí zavreť, tak funkcia vráti nulu. To v tvojom if je reprezentované ako false. Akékoľvek iné číslo je ako true, a to by vrátilo v prípade že sa nepodarí uzavreť
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

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

Lenze podmienka je nepravdiva. :) fclose() vrati 0, ak sa subor podari zavriet(inak EOF). Zmenil by som to teda na

Kód: Vybrať všetko

if (fclose(fr) == EOF) {
    printf("Subor sa nepodarilo zavriet.\n"); 
    return 1;
} else { 
    printf("Subor sa podarilo zavriet.\n"); 
}
Jygsaw
Amateur
Amateur
Príspevky: 24
Registrovaný: 06 mar 2009, 14:40

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

Vďaka za vysvetlenie. :wink:
Napísať odpoveď