PDA

Visualizza la versione completa : [C] Errore guida forum nell'uso di fopen()


Ifrit
08-12-2007, 16:21
Salve, volevo chiedere spiegazioni riguardante un'esempio di codice inserito nela guida C del sito.
mi riferisco all'esempio di pag 37 [La Funzione fopen] (http://programmazione.html.it/guide/lezione/1115/la-funzione-fopen/)


posto il codice:



#include <stdio.h>

int main()
{

/* dichiara lo stream e il prototipo della funzione fopen */
FILE *stream, *fopen();

/* apre lo stream del file */
stream = fopen("miofile.txt", "r");

/* controlla se il file viene aperto */
if ((stream = fopen("miofile.txt", "r")) == NULL)
{
printf("Non posso aprire il file %sn", "miofile.txt");
exit(1);
}

[...]
/* Codice che lavora sul file */
[...]

}

il costrutto if testa la condizione interna alle parentesi e se vera esegue il blocco di istruzioni successivo, altrimenti lo salta....
in questo caso il test non viene fra lo stream e NULL, ma fral'esito della operazione stream = fopen("miofile.txt", "r") e NULL,

ora il codice funziona, perche nel caso l'operazione non vada a buon fine torna uno 0, il quale comparato con NULL da esito positivo,

Ciò che non capisco e per quale motivo fare 2 volte la stessa operazione, non basterebbe soltato testare se stream == Null? oppure omettere l'apertura dello stream prima del'if?

MacApp
08-12-2007, 16:44
Sì è un errore, dovrebbe fare così:


#include <stdio.h>

int main()
{

/* dichiara lo stream e il prototipo della funzione fopen */
FILE *stream, *fopen();

/* apre lo stream del file */
stream = fopen("miofile.txt", "r");

/* controlla se il file viene aperto */
if (stream == NULL)
{
printf("Non posso aprire il file %sn", "miofile.txt");
exit(1);
}

[...]
/* Codice che lavora sul file */
[...]

}


oppure:


#include <stdio.h>

int main()
{

/* dichiara lo stream e il prototipo della funzione fopen */
FILE *stream, *fopen();

/* apre lo stream del file e controlla se il file viene aperto */
if ((stream = fopen("miofile.txt", "r")) == NULL)
{
printf("Non posso aprire il file %sn", "miofile.txt");
exit(1);
}

[...]
/* Codice che lavora sul file */
[...]

}

Ifrit
08-12-2007, 16:47
si e quello ke avevo pensato :-)
no volevo solo avere conferma ke nel codice postato c'era quest'incoerenza
grazie :ciauz:

p.s.
[Avvertiamo lo staff almeno corregge, oppure lasciamo cosi?]

Loading