Salve, qualcuno può aiutarmi a capire perché non mi funziona la ricerca e la modifica nel mio programma, grazie:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{//definizione della struct studente
char nome[20];
char cognome[20];
char data[20];
}studente;
void main(){
FILE *f1;
int scelta, i;
int nl=0; //serve per contare quanti studenti ci sono
char Tdata[20]; //data da trovare
char Tnome[30]; //nome da trovare
do{
fflush(stdin);
//menu'
printf("MENU'\n");
printf("1)Inserisci dati\n");
printf("2)Stampa dati\n");
printf("3)Ricerca\n");
printf("4)Modifica studente\n");
printf("\nEffettua una scelta valida: ");
scanf("%d", &scelta);
while(scelta<1||scelta>5){
printf("\nErrore! Scelta selezionata non valida: ");
scanf("%d", &scelta);
}
switch(scelta){
case 1://inserimento dei dati
system("CLS");
f1=fopen("elenco.dat", "a+");
studente x;
printf("Inserire il nome:\n");
scanf("%s", &x.nome);
fflush(stdin);
printf("Inserire cognome:\n");
scanf("%s", &x.cognome);
fflush(stdin);
printf("Inserire la data di nascita (es 12.12.2021): \n");
scanf("%s", &x.data);
fflush(stdin);
fwrite(&x, sizeof(studente), 1, f1);
fclose(f1);
break;
case 2://stampa dei dati
system("CLS");
f1=fopen("elenco.dat", "r");
printf("Elenco di tutti gli studenti: \n \n");
while(!feof(f1)){
if(fread(&x, sizeof(studente), 1, f1)!=0){
printf("Nome: %s \n", x.nome);
printf("Cognome: %s \n", x.cognome);
printf("Data di nascita: %s \n", x.data);
printf("\n");
}
}
fclose(f1);
break;
case 3://ricerca all'interno del file
system("CLS");
f1=fopen("elenco.dat", "r+b");
rewind(f1);//mi porta all'inizio del file
while(fread(&x, sizeof(studente), 1, f1)==1){//ciclo che conta gli studenti presenti nel file
nl++;
}
printf("Inserire la data da cercare: ");
scanf("%s", &Tdata);
rewind(f1);
for(i=0; i<nl; i++){
fread(&x, sizeof(studente), 1, f1);
if(strcmp(x.data, Tdata)==0){
printf("Data trovata! \n");
printf("Nome: %s \n", x.nome);
printf("Cognome: %s \n \n", x.cognome);
break;
}
else
printf("Data non trovata \n");
}
fclose(f1);
break;
case 4://modifica dei dati
system("CLS");
f1=fopen("elenco.dat", "a+");
rewind(f1);
while(fread(&x, sizeof(studente), 1, f1)==1){
nl++;
}
printf("Inserire lo studente da modificare: ");
scanf("%s", &Tnome);
rewind(f1);
for(i=0; i<nl; i++){
fread(&x, sizeof(studente), 1, f1);
if(strcmp(x.nome, Tnome)==0){
printf("Inserire in nuovo nome:");
scanf("%s \n", x.nome);
fflush(stdin);
printf("Inserire in nuovo Cognome:");
scanf("%s \n", x.cognome);
fflush(stdin);
printf("Inserire la nuova data:");
scanf("%s \n", x.data);
fflush(stdin);
break;
}
else
printf("Inserire un nome valido ! \n \n");
}
fclose(f1);
break;
default:
break;
}
}while(scelta!=5);
system("PAUSE");
}