Si è vero,scusatemi sono un autodidatta e sono alle prime armi, abbiate pazienza
ho un altro problema,nella funzione searchName quando cancello il record dal file mi cancella quello successivo, la fread prima acquisisce i dati e li immagazzina nella variabile di struttura e poi passa il puntatore al record successivo, invece dovrei cancellare il record precedente.
#include <stdio.h>
#include <string.h>
void inizializza(FILE *fPtr);
void insertName(FILE *fPtr);
void searchName(FILE *fPtr);
typedef struct person {
char lastName[15];
char firstName[15];
char age[4];
} Person;
int main() {
FILE *namePtr;
char *s = "Premi 1 per inizialiizare,2 per inserire nomi, 3 per cercare, 0 per uscire: ";
int i;
printf("%s", s);
fscanf(stdin, "%d%*c", &i);
while(i) {
switch(i) {
case 1:
inizializza(namePtr);
break;
case 2:
insertName(namePtr);
break;
case 3:
searchName(namePtr);
}
printf("%s", s);
fscanf(stdin, "%d%*c", &i);
}
return 0;
}
void inizializza(FILE *fPtr) {
int i;
Person blankpersons = {"unassigned", "", "0"};
if(!(fPtr = fopen("nameage.dat", "wb")))
printf("Non posso creare nameage.dat\n");
else {
for (i = 0; i < 100; i += 1)
fwrite( &blankpersons, sizeof(struct person), 1 , fPtr);
}
fclose(fPtr);
}
void insertName(FILE *fPtr) {
Person persons = {"", "", ""};
if((fPtr = fopen("nameage.dat", "rb+"))) {
fscanf(stdin, "%s%s%s", persons.lastName, persons.firstName, persons.age);
while(!feof(stdin)) {
fwrite( &persons, sizeof(Person), 1, fPtr);
fscanf(stdin, "%s%s%s", persons.lastName, persons.firstName, persons.age);
}
}
fclose(fPtr);
}
void searchName(FILE *fPtr) {
char name[15], s = 's';
int i = 0;
Person persons = {"", "", ""};
Person blankpersons = {"unassigned", "", "0"};
if((fPtr = fopen("nameage.dat", "rb+"))) {
printf("Inserisci il nome: ");
fscanf(stdin, "%s%*c", name);
while(!feof(fPtr)) {
fread( &persons, sizeof(Person), 1, fPtr);
if(!strcmp(persons.lastName, name)) {
printf("Trovato, vuoi cancellare il record? S/n: ");
fscanf(stdin, "%c", &s);
i++;
if( s == 's' || s == 'S') {
fwrite( &blankpersons, sizeof(Person), 1, fPtr);
break;
}
}
}
}
if(i)
printf("No info\n");
}
come posso ovviare al problema?