Salve a tutti, stò cercando di creare un mio database. Ho problemi con la ricerca all'interno del file di testo dove vado a salvare i dati degli utenti. Dopo varie ricerche, ho trovato qualcosa che dovrebbe funzionare. Però non funziona ancora completamente, ma solo a metà. Inserisco il nome da cercare, il programma cerca all'interno del file (almeno spero) e mi restituisce il nome che ho cercato. Però io vorrei che mi restituisse tutti i dati relativi a quel nome. Come posso fare?
So che ci sono varie discussioni su questo forum che riguardano questo problema, ma non mi sono state d'aiuto, perciò ho deciso di aprire una discussione nuova.
Posto l'intero codice mettendo in evidenza la parte che riguarda la funzione di ricerca.
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define userfile "users.txt"

typedef struct{
        char nome[30];
        char cognome[30];
        char citta[30];
        char provincia[30];
        int eta;
} user;

int main(void){
    FILE *fp;
    user u;
    int scelta;
    if(!(fp=fopen(userfile, "a"))){
                            printf("Errore.\n");
                            exit(1);                        
    }
    printf("Database.\n\nInserisci il numero relativo all'operazione che vuoi effettuare:\n");
    printf("1 - Inserisci Utente\n");
    printf("2 - Modifica Utente\n");
    printf("3 - Visualizza Utenti\n");
    printf("4 - Cerca Utente\n");
    printf("5 - Elimina Utente\n");
    printf("6 - Esci\n\n");
    scanf("%d", &scelta);
    fflush(stdin);
    if (scelta==1){
                   system("cls");
                   int oper;
                   printf("Inserimento utente nel database.\n\n");
                   puts("Nome:");
                   fgets(u.nome, 30, stdin);
                   fflush(stdin);
                   puts("\nCognome:");
                   fgets(u.cognome, 30, stdin);
                   fflush(stdin);
                   puts("\nCitta':");
                   fgets(u.citta, 30, stdin);
                   fflush(stdin);
                   puts("\nProvincia:");
                   fgets(u.provincia, 30, stdin);
                   fflush(stdin);
                   printf("\nEta':\n");
                   scanf("%d", &u.eta);
                   // Scrivo i dati su file
                   fprintf(fp, "%s%s%s%s%d\n\n", u.nome, u.cognome, u.citta, u.provincia, u.eta);
                   printf("\n\nDati inseriti con successo.\n\n");
                   fclose(fp);
                   printf("Premere 1 per tornare al menu, 0 per uscire: ");
                   scanf("%d", &oper);
                   if (oper==1){
                                system("cls");
                                main();             
                   } else if (oper==0){
                          return 0;       
                   }
                   system("cls");
                   main();       
    } else if (scelta==3){
           system("cls");
           int oper;
           fp=fopen(userfile, "r");
           if(fp){
           while(!feof(fp)){
                            fgets(u.nome, 30, fp);
                            fgets(u.cognome, 30, fp);
                            fgets(u.citta, 30, fp);
                            fgets(u.provincia, 30, fp);
                            fscanf(fp, "%d\n", &u.eta);
                            printf("Nome: %sCognome: %sCitta': %sProvincia: %sEta': %d\n\n", u.nome, u.cognome, u.citta, u.provincia, u.eta);                
           } 
           fclose(fp);
           printf("Premere 1 per tornare al menu, 0 per uscire: ");
           scanf("%d", &oper);
           if (oper==1){
                        system("cls");
                        main();             
           } else if (oper==0){
                  return 0;       
           }
           } 
           else {
                  printf("Errore durante l'apertura del file.\n");       
           }
    } else if (scelta==4){
           FILE *fp;
           char nome1[30];
           printf("Inserisci il nome da cercare: ");
           scanf("%s", &nome1);
           fp=fopen(userfile, "rt");
           while (fgets(u.nome, 30, fp)!=NULL){
                 if(strstr(u.nome, nome1)!=NULL){
                                   printf(nome1);              
                 }      
           }
    } else if (scelta==6){
           return 0;       
    }
}