Salve ragazzi, nuovo giorno, nuovo bug.
Ho appena terminato un progetto in c, l'ultimo in c della mia carriera universitaria, finalmente. Tutto sembra funzionare benissimo tranne una funzione. Questa funzione dovrebbe permettere all'utente di cercare un record tramite codice id (intero facente parte di una struct) e poi modificare i dati di quel record. Ecco il codice:
FILE *writePatient = fopen("dati_pazienti.dat", "rb+");
if (writePatient == NULL) {
fprintf(stderr, "\nError opening file\n");
exit(1);
}
else {
puts("Inserire ID dell'account da cancellare.");
int editId;
scanf("%d", &editId);
int daSize = sizeof(struct generalPatient);
while (fread(&patient, daSize, 1, writePatient))
{
if (editId == patient.id){
fai roba
}
Altre funzioni simili, che cioè funzionano per ricerca di codice id funzionano mentre questa non trova mai alcuna corrispondenza, qualunque id io inserisca.
Ho scritto la funzione di registrazione del paziente aprendo il file in modalità "a", in modo che il record sia scritto sempre alla fine del file. Quella funzione salva l'id in questo modo:
srand(time(NULL));
patient.id=1 + rand()%9999;
e scrive i dati così:
fwrite (&patient, sizeof(struct generalPatient), 1, writePatient);
Per essere ancora più chiaro, ho scritto un'altra funzione che cerca il record paziente tramite id al semplice scopo di visualizzarlo e questa funziona benissimo:
readPatientPointer = fopen ("dati_pazienti.dat", "r");//apertura file
if (readPatientPointer == NULL){
fprintf(stderr, "\nError opening file\n");
exit (1);
}else{
int check=0;//variabile di controllo per la riuscita del login
puts("Inserire ID del paziente da ricercare.\nInserire qualunque carattere per uscire dal programma.");
int searchId;
if(scanf("%d", &searchId)!=1){
puts("Programma terminato.");
return EXIT_SUCCESS;
}
while(fread(&patientRead, sizeof(struct generalPatient), 1, readPatientPointer)){//stampo il record
if(searchId==patientRead.id){
fai roba
}
Dove potrebbe essere il problema?