Salve a tutti, primo messaggio sul forum, ma leggo sempre tutti i corsi in home che mi hanno spesse volte dato una mano e insegnato cose nuove 
Vi scrivo principalmente a causa di un problema che mi sta affliggendo da alcuni giorni, uno di quei problemi cosi stupidi e banali che non ti fanno dormire la notte
A scopo didattico mi è stato assegnato un esercizio per la gestione di una segreteria studenti tramite file ad accesso sequenziale.
Fin qui tutto ok, non è la prima volta che combatto con i file.
Il punto è che dopo aver implementato un algoritmo di modifica bello polposo, il tutto non mi funge proprio sul piu bello
La funzione è la seguente:
codice:
void modifica(){
studente stud;
int i=0,j=0,risp;
fp=fopen("PrimoAn.dat","rb");
char tmp[10];
if(fp!=NULL){
printf("Inserisci il cognome dello studente che vuoi modificare: ");
scanf("%s",tmp);
printf("Elementi corrispondenti:\n\n");
fread(&stud,sizeof(studente),1,fp);
while(!feof(fp)){
if(strcmp(tmp,stud.cognome)==0){
printf("%d %s %s %s %s %d %s\n\n",stud.codice,stud.cognome,stud.nome,stud.voto,stud.lang,stud.classe,stud.sez);
printf("Vuoi modificare questo elemento? 0=no 1=si\n");
scanf("%d",&risp);
if(risp==1){
fclose(fp);
fp=fopen("PrimoAn.dat","r+b");
while(j<i){
fread(&stud,sizeof(studente),1,fp);
j++;
}
j=0;
printf("Inserisci i dati dello studente separati da uno spazio:\n");
printf("<Codice> <Cognome> <Nome> <Voto diploma> <Lingua> <Classe> <Sezione>\n");
scanf("%d %s %s %s %s %d %s",&stud.codice,&stud.cognome,&stud.nome,&stud.voto,&stud.lang,&stud.classe,&stud.sez);
fwrite(&stud,sizeof(studente),1,fp);
}
}
fread(&stud,sizeof(studente),1,fp);
i++;
}
fclose(fp);
}
else{
printf("Archivio vuoto\n");
}
}
Il codice sorgente completo lo potete trovare qui:
https://dl.dropboxusercontent.com/u/...ria_studenti.c
Ho debuggato il programma con decine di break point e sono arrivato alla conclusione che tutto cicla e procede come dovrebbe, il buffer prende i giusti valori prima della scrittura e il puntatore al file punta esattamente dove dovrebbe.
L'inghippo purtroppo scatta nell' fwrite che trovate poco prima della fine dell'if, che in pratica sembra rifiutarsi di scrivere su file il buffer stud appena scaneffato ..
Il punto sapete qual è ?
Che questo stesso identico codice sorgente, compilato ed eseguito su c4droid (compilatore c per android per chi non lo sapesse) GIRA A MERAVIGLIA
Il file viene correttamente scritto ed il record risulta perfettamente modificato alla visualizzazione successiva.
Su PC ho provato sia con Visual C++ che con DevC , ed il risultato è sempre il medesimo..
fwrite in alcun modo vuol fare il proprio dovere.
Qualche anima pia può illuminarmi prima che faccia in 1000 pezzi compilatore, notebook, cellulare android e libretto universitario?