Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408

    [C] Funzione di ricerca all'interno di un file

    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;       
        }
    }

  2. #2
    Utente di HTML.it L'avatar di goatboy
    Registrato dal
    Mar 2011
    residenza
    Salerno
    Messaggi
    408
    Nessun consiglio? sono giorni che mi scervello

  3. #3
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    codice:
    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);              
                     }      
    }
    Bhè....nella scanf quando leggi una stringa non devi usare la &.

    poi al posto della strstr(), che onestamente non conosco...usa la strcmp()...prova così...vedi un pò se funziona e fammi sapere!
    ciao
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.