Struttura di liste a dimensione variabile

di il
2 risposte

Struttura di liste a dimensione variabile

Ragazzi buonasera,
devo fare un progetto che permetta di gestire i dati di un atleta (nome, cognome, codicefiscale, ecc.) mediante l'utilizzo di una struttura a lista.
Non ho problemi a costruire la struttura dati, nè a scrivere gli algoritmi che permettono di inserire/ricercare/visualizzare i dati.
Il problema sorge quando devo prelevare i dati da un file di log, in quanto mi serve un programma che ad ogni avvio inserisca nei vari campi della lista anche i valori che sono stati inseriti in lista al precedente avvio (quindi i dati sono stati salvati nel file di log).

Il problema che ho consiste nella lettura da file nel caso in cui ci si trova un campo nome composto da una stringa con spazio (es. Francesco Pio).
E' una settimana che ci lavoro e non so più dove sbattere la testa. Il file di log è fatto così:

001\tFrancesco Pio\tRossi\t01/03/1980\tLuogodinascita\tCodicefiscale
002\tMarco\tBianchi\t02/02/1990\tLuogodinascita\tCodicefiscale

Se presuppongo di avere tutti i campi senza spazi è scontato fare una fscanf, ma il campo nome può ovviamente anche contenere spazi.
Come ultima spiaggia avevo pensato a una cosa del genere, ma compio errori di segmentazione. Aiutatemi pleasee
lista_giocatori = fopen("giocatori.txt", "r");
          while(!feof(lista_giocatori))
          {
              fscanf(lista_giocatori, "%03d", &id);
              i = 0;
              while(fgetc(lista_giocatori) != '\t')
              {
                 nome[i] = fgetc(lista_giocatori)
                 i++;
              }
             i = 0;
             while(fgetc(lista_giocatori) != '\t')
             {
                cognome[i] = fgetc(lista_giocatori);
                i++;
             }
             i = 0;
             while(fgetc(lista_giocatori) != '\t')
             {
                data_nascita[i] = fgetc(lista_giocatori);
                i++;
              }
              i = 0;
             while(fgetc(lista_giocatori) != '\t')
             {
                luogonascita[i] = fgetc(lista_giocatori);
                i++;
              }
             i  = 0;
             while(fgetc(lista_giocatori) != '\t')
             {
                codicefiscale[i] = fgetc(lista_giocatori);
                i++;
             }

2 Risposte

  • Re: Struttura di liste a dimensione variabile

    
    while(fgetc(lista_giocatori) != '\t')
                 {
                    luogonascita[i] = fgetc(lista_giocatori);
                    i++;
                  }
    
    Quanti caratteri leggi per ciclo facendo così?

    Comunque se non vuoi fare tutto a basso livello, c'è getline() per leggere le linee e strttok() per splittarle tramite il tab
  • Re: Struttura di liste a dimensione variabile

    nicosanti98 ha scritto:


    Il problema sorge quando devo prelevare i dati da un file di log, in quanto mi serve un programma che ad ogni avvio inserisca nei vari campi della lista anche i valori che sono stati inseriti in lista al precedente avvio (quindi i dati sono stati salvati nel file di log).
    Intanto correggiamo subito un errore: quello è un database (archivio) NON un file di LOG. Un file di LOG è una cosa ben diversa (e di solito un programma si limita a scriverlo).
    ma compio errori di segmentazione.
    Ovviamente non "compi" un beato cavolo. Piuttosto devi dirci ESATTAMENTE il messaggio di errore che ricevi.

    Problemi rilevati:
    - disordine generale e scarsa leggibilità
    - totale mancanza di commenti
    - manca la dichiarazione delle variabili
    - non aggiungi il terminatore di stringa #0 da nessuna parte

    Il codice è del tutto inefficente, dovresti leggere una riga alla volta e farne il parsing.
Devi accedere o registrarti per scrivere nel forum
2 risposte