PDA

Visualizza la versione completa : [C] scrittura su file


slashino
22-12-2011, 19:11
Salve,
sto cercando di capire come funziona la lettura da e la scrittura su file.
Il programma dovrebbe leggere da file una serie di numeri, salvarli in un vettore, raddoppiare ogni elemento del vettore, e ricopiare in coda ai numeri iniziale il loro doppio ( quindi stampare sul file il vettore modificato).Purtroppo oltre a stampare sul file i numeri raddoppiati, mi stampa anche un altro numero che non so da dove proviene :( ecco : http://img808.imageshack.us/img808/1106/xhtmln.png (http://imageshack.us/photo/my-images/808/xhtmln.png/)
Il codice questo:


#include<stdlib.h>
#include<stdio.h>
main()
{
FILE* f;
char nome[10];
int vettore[10],i,z;
printf("Inserire il nome del file\n");
scanf("%s", nome);
f=fopen(nome, "r");
i=0;
if(f==NULL)
{
exit(0);
}
else
{
while(feof(f)==0)
{
fscanf(f,"%d", &vettore[i]);
i=i+1;
}
fclose(f);
for(z=0;z<i;z++)
{
vettore[z]=vettore[z]*2;
}
fopen(nome, "a");
for(z=0;z<i;z++)
{
fprintf(f,"%d\n", vettore[z]);
}
fclose(f);


}
system("pause");
}

ramy89
22-12-2011, 19:31
Secondo me il problema sta nel fatto che tu scrivi sul file con fprintf ma scrivi anche i caratteri newline, per cui feof non lo raggiungi quando hai finito di leggere tutti i numeri, ma un passo dopo, perch legge anche '\n'.
Quindi devi tenere conto di questo, prova a modificare la fscanf cos:


fscanf(f,"%d\n", &vettore[i]);

E fammi sapere se funziona.

slashino
22-12-2011, 19:38
Ho corretto e adesso va bene. Ti ringrazio. Ma per quale motivo aggiungedo \n leggo soltanto i numeri nel file? Cio, mettiamo caso che non ci fosse, le cose andrebbero in questo modo? :
leggo l'ultimo numero, feof mi restituisce ancora 0 perch dopo l'ultimo numero c' lo spazio, quindi leggo lo spazio.

ramy89
22-12-2011, 19:41
Lo spazio non '\n' , un altro carattere.Comunque si, se nella frase che hai detto sostituisci le parole "spazio" con "invio", giusta.

slashino
22-12-2011, 19:44
Si, non so come mi uscito spazio xD Quindi, se i numeri nel file fossero disposti tutti lungo una riga, non ci sarebbe bisogno di aggiungere \n alla scanf giusto?

ramy89
22-12-2011, 19:58
Non ci sarebbe bisogno,per se ad esempio scrivi 1,2 e 3 tutti attaccati, ti legge 123 come primo numero.Non sa distringuere le cifre, non sa quando fermarsi a leggere.Ci vuole un carattere separatore.

slashino
22-12-2011, 20:04
Giusto. Quindi in pratica, per evitare che legga l'invio alla fine, sempre necessario aggiungere \n alla fscafn giusto? :confused: Ti ringrazio comunque...

ramy89
22-12-2011, 21:01
Se usi una singola scanf o fscanf si pu anche evitare,ma in generale si, meglio aggiungere un '\n' .

slashino
22-12-2011, 21:08
Grazie mille! :D

Loading