PDA

Visualizza la versione completa : [C] Gestione file


slashino
21-12-2011, 22:22
Salve,
sto cercando di capire come funziona la gestione dei file. Nel seguito cerco di prendere una serie di numeri da un file (che si trova nella cartella dell'eseguibile) e stamparli semplicemente a video.
Se inserisco il nome del file correttamente, il tutto funziona bene. Se però inserisco un nome errato il programma si chiude con il solito errore di windows ( mentre dovrebbe stampare a video un avviso di errore e poi uscire)
Ecco il codice:


#include<stdio.h>
#include<stdlib.h>
int lettura( int vettn[]);
main()
{
int vettn[20],i;
int vettb[20][11];
int dim;
dim=lettura(vettn);
if(dim==-1)
{
printf("Errore nell'apertura del file\n");
exit(1);
}
else
{
for(i=0;i<dim;i=i+1)
{
printf("%d\n", vettn[i]);
}
}
system("pause");

}
int lettura( int vettn[])
{
int dim,i;
FILE* f;
char nome[10];
printf("Inserire il nome del file\n");
scanf("%s", nome);
f=fopen(nome, "r");
if(f==NULL)
{
dim=-1;
}
else
{
i=0;
while(feof(f)==0)
{
fscanf(f,"%d", &vettn[i]);
i=i+1;
}
dim=i;
}
fclose(f);
return dim;
}

goatboy
22-12-2011, 09:44
Nella scanf manca la & commerciale..

slashino
22-12-2011, 10:20
Ma non ci vuole perchè è una stringa! Gli passo già l'indirizzo....o sbaglio?

goatboy
22-12-2011, 10:22
Originariamente inviato da slashino
Ma non ci vuole perchè è una stringa! Gli passo già l'indirizzo....o sbaglio?
Credo che ci voglia lo stesso, io ho provato ad inserirla e mi da il messaggio che ho inserito un nome errato..

slashino
22-12-2011, 10:25
Ma è assurda come cosa! Li non ci vuole la &...E' impossibile che ti funziona se ci metti la &..sei sicuro?

goatboy
22-12-2011, 10:44
Originariamente inviato da slashino
Ma è assurda come cosa! Li non ci vuole la &...E' impossibile che ti funziona se ci metti la &..sei sicuro?
Scusa ma perchè non ci provi anche tu? Almeno vedi se funziona. A me va..

slashino
22-12-2011, 10:55
Cioè anche se digiti il nome del file in modo errato ti compare l'avviso di errore? Comunque ho provato e non va...sicuro che non hai modificato altro?
ps: se hai fatto il programma me lo potresti mandare?

goatboy
22-12-2011, 11:00
Originariamente inviato da slashino
Cioè anche se digiti il nome del file in modo errato ti compare l'avviso di errore? Comunque ho provato e non va...sicuro che non hai modificato altro?
ps: se hai fatto il programma me lo potresti mandare?
Ho preso il tuo codice ed ho inserito la & nella scanf, quella all'interno della funzione lettura. Dato che non so qual'è il nome giusto del file da inserire, ne ho inserito uno qualunque e il risultato è stato il messaggio "errore nell'apertura del file". Comunque prova a mandarmi la traccia via mp e vedo se l'ho fatto.

slashino
22-12-2011, 11:01
Ok ora te la mando :D

slashino
24-12-2011, 16:43
Per la cronaca, ho risolto il problema. L'errore sta nel fatto che se c'è un errore nell'apertura del flusso io inserisco semplicemente -1 in dim per poi ritornarlo alla fine. Prima del return però, c'è fclose(f). Ovvero sto cercando di chiudere un flusso che non è stato aperto e quindi il programma si blocca. Per risolvere basta mettere return -1 direttamente qualora f==NULL.

Loading