Veramente MSDN dice
"r+" Opens for both reading and writing. (The file must exist.)
Veramente MSDN dice
"r+" Opens for both reading and writing. (The file must exist.)
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Va bene lo stesso. Accoderò un numero a quello già presente ottenendo un nuovo numero a 2 cifre. Userò quello come valore sentinella.Originariamente inviato da shodan
la fprintf dovrebbe accodare il dato modificato, non sostituirlo.
Il problema è che non riesco nemmeno a far questo.
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Già. A dimostrazione che ho dimenticato del tutto il C ( e di cui non sento la mancanza )![]()
Insomma, mi appendo??
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Magari se postassi qualcosa di compilabile si potrebbe capire di più, ma con quel frammento di codice, più di qualche supposizione non si può fare.
Dunque, creare un file .txt e metteteci questi dati dentro
e provatelo con questo codice1 nome1 cognome1 indirizzo1 021056931 0
2 nome2 cognome2 indirizzo2 021056932 0
3 nome3 cognome3 indirizzo3 021056933 0
4 nome4 cognome4 indirizzo4 021056934 0
5 nome5 cognome5 indirizzo5 021056935 0
6 nome6 cognome6 indirizzo6 021056936 0
7 nome7 cognome7 indirizzo7 021056937 0
codice:struct _Nominativo { char Nome[20]; char Cognome[20]; char Telefono[20]; char Indirizzo[50]; }; typedef struct _Nominativo Nominativo; struct _Rubrica { unsigned int Index; Nominativo Nome; unsigned int Eliminato; }; typedef struct _Rubrica Rubrica; int main() { FILE *f = fopen("file.txt","r+"); int Index; Rubrica rub; printf("Inserire l'indice da eliminare: "); scanf("%d",&Index); if (Index < 0) printf("\nIndice non valido"); else if (Index > ProssimoIndice(f) - 1) printf("\nIl record selezionato non esiste"); else { fseek(f,0,SEEK_SET); for (int i = 0; i < Index; i++) { fscanf(f,"%d %s %s %s %s %d",&rub.Index,rub.Nome.Nome,rub.Nome.Cognome,rub.Nome.Indirizzo,rub.Nome.Telefono,&rub.Eliminato); } fprintf(f,"%d",1); } }
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Here is it
codice:unsigned int ProssimoIndice(FILE *f) { Rubrica rub; unsigned int i; i = 0; fseek(f,0,SEEK_SET); while(!feof(f)) { fscanf(f,"%d %s %s %s %s %d",&rub.Index,rub.Nome.Nome,rub.Nome.Cognome,rub.Nome.Indirizzo,rub.Nome.Telefono,&rub.Eliminato); i = rub.Index; } return i+1; }
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog
Capito. Devi mettere una fseek prima della fprintf per riallineare il buffer interno.
Il problema è calcolare l'offest corretto per posizionare il cursore di scrittura sul punto che vuoi. Il guaio è che la fscanf non fornisce il numero di byte letti, ma quello degli elementi letti.
Con:
la fprintf funziona ma il risultato della scrittura varia a seconda del record usato.Originariamente inviato da XWolverineX
codice:fseek(f,0,SEEK_SET); for (int i = 0; i < Index; i++) { fscanf(f,"%d %s %s %s %s %d",&rub.Index,rub.Nome.Nome,rub.Nome.Cognome,rub.Nome.Indirizzo,rub.Nome.Telefono,&rub.Eliminato); } fseek(f,ftell(f),SEEK_SET); fprintf(f,"%d",1); } }
Il tuo metodo sembra funzionare bene (anche se non ho capito cosa hai fatto).
In che senso il risultato della fprintf varia a seconda del testo??
"Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)
"Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)
http://xvincentx.netsons.org/programBlog