Salve praticamente ho due problemini riscontrati in questo codice:

- Nella funzione cerca mi stampa "Valore non trovato" per gli elementi presenti nel file.. tipo ci sono 3 elementi e mi stampa 3 volte il messaggio.

- Inoltre non riesco a far funzionare la funzione elimina, se conoscete un metodo migliore, io ho trovato solo questo ç_ç (mi crea il file frutta2.txt ma nel programma non funziona lo stesso..)

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct tabella{
 int cod_prod;
 char nome_prod[10];
 char tipo_prod[20];
 float prezzo;
 int cancellato;
 };
typedef tabella frutta;
void menu();
void insElemento();
void cercaElemento();
void delElemento();
void visElemento();
int main(){
 int comando;
 do{
 menu();
 printf("\nComando:\t");
 scanf("%d", &comando);
 switch(comando){
  case 1:{
   insElemento();
   break;
  }
  case 2:{
   cercaElemento();
   break;
  }
  case 3:{
   delElemento();
   break;
  }
  case 4:{
   visElemento();
   break;
  }
 }
 }while(true);
 return 0; 
}
void menu(){
 printf("--------------------------");
 printf("\n1 - Inserisci Prodotto\n");
 printf("2 - Cerca Prodotto\n");
 printf("3 - Elimina Prodotto\n");
 printf("4 - Visualizza Prodotti\n");
 printf("--------------------------");
}
void insElemento(){
 int risp;
 FILE *fp;
 struct tabella frutta;
 fp=fopen("frutta.txt","a");
 do{
  printf("Inserisci il codice del prodotto: ");
  scanf("%d", &frutta.cod_prod);
  printf("Inserisci il nome del prodotto: ");
  scanf("%s", frutta.nome_prod);
  printf("Inserisci la tipologia del prodotto: ");
  scanf("%s", frutta.tipo_prod);
  printf("Inserisci il prezzo del prodotto: ");
  scanf("%f", &frutta.prezzo);
  fwrite (&frutta, sizeof (struct tabella), 1, fp);
  
  printf("Continuare? 1:SI - 0:NO\t");
  scanf("%d", &risp);
 }while (risp==1);
 fclose(fp);
}
 void cercaElemento(){ //Ho provato il comando strcmp, ma di norma si dovrebbe fare con il codice.
  char search[10];
  FILE *fp;
  struct tabella frutta;
  printf("Inserire il nome prodotto da ricercare "); 
   scanf("%s", search); 
   fp=fopen("frutta.txt", "r"); 
   while(fread(&frutta, sizeof(struct tabella), 1, fp)>0){
   
      if (!strcmp(frutta.nome_prod, search)) 
      {  
      printf("Cod: %d\tNome: %s\tTipo: %s\tPrezzo: %f E\n" , frutta.cod_prod, frutta.nome_prod, frutta.tipo_prod, frutta.prezzo);
  }
  //PERCHE NON FUNZIONA l'ELSE?? INFATTI MI STAMPA Elemento non trovato tante volte quanto gli elementi presenti nel file.
  /*else{
  printf("Elemento non trovato!\n");
  }*/
 }
}
 
 
 void delElemento(){
  //Cancellazione Logica
  int elimina;
  FILE *fp;
  struct tabella frutta; 
  printf("Inserire il codice prodotto da eliminare: "); 
   scanf("%d", &elimina); 
  fp=fopen("frutta.txt", "r"); 
  int trovato=0; 
  while ((!trovato) && (!feof(fp))) {  
  fread(&frutta, sizeof(struct tabella), 1, fp); 
  if (frutta.cod_prod==elimina){   
  trovato = 1;   
  frutta.cancellato=1; 
  fseek(fp, -sizeof(struct tabella), SEEK_CUR); 
  fwrite(&frutta, sizeof(struct tabella), 1, fp); 
  } 
  } 
  fclose(fp); 
  //Cancellazione fisica
  FILE *fp1, *fp2; 
  fp1=fopen("frutta.txt", "r"); 
  fp2=fopen("frutta2.txt", "w"); 
  while(!feof(fp1)){  
  fread(&frutta, sizeof(struct tabella), 1, fp);  
  if (!frutta.cancellato)   
  fwrite(&frutta, sizeof(struct tabella), 1, fp2); 
  } 
  fclose(fp1); 
  fclose(fp2); 
  remove("frutta.txt"); 
  rename("frutta2.txt","frutta.txt");
 }
 void visElemento(){
  FILE *fp;
  struct tabella frutta;
  fp=fopen("frutta.txt","r");
  
  while(fread(&frutta, sizeof (struct tabella), 1, fp)>0){
  printf("Cod: %d\tNome: %s\tTipo: %s\tPrezzo: %f E\n" , frutta.cod_prod, frutta.nome_prod, frutta.tipo_prod, frutta.prezzo);
 }
  fclose(fp);
 }