View Single Post
Old 10-03-2013, 17:13   #1
Marco95
Member
 
Iscritto dal: May 2010
Messaggi: 126
[C/C++]Costruire lista da file

Ciao ragazzi..scrivo perchè ho un problema sul leggere il contenuto di un file e metterlo su una lista concatenata semplice.
Il file di testo è strutturato così:
Codice:
"luca","pippo","marco","etc...",...
...
...
e il programma apparentemente funzionante che ho scritto è questo:

Codice:
#include <iostream>
#include <fstream>
#include <string.h>
#include <malloc.h>
using namespace std;
struct nome {
              char *p;
              nome* succ;
};
typedef nome Tnome;
Tnome* CreaLista();
void Inizializza(char array[],int dim);
void Inserisci(Tnome* &lista,char buffer[]);
void StampaLista(Tnome* lista);
void OrdinaLista(Tnome* &lista);
void Scambia(char* str1[],char* str2[]);

int main()
{
    int prova=0;

    char buffer[100];
    char c;
    int contavirgolette = 0;
    int k=0;
    Tnome *nomipropri;
    ifstream testo;
    testo.open("prova.txt",ios::in);
    nomipropri = CreaLista();
    while(!testo.eof())
    {
        while(contavirgolette<2)
        {
           c = testo.get();
             if (c!='"')
                buffer[k++] = c;
             else contavirgolette++;
        }
        buffer[k]=0;
        k = 0;
           prova++;
           contavirgolette = 0;

            Inserisci(nomipropri,buffer);
            Inizializza(buffer,100);
            c = testo.get();
        

        }
    testo.close();
    StampaLista(nomipropri);



}
Tnome* CreaLista()
{
    return NULL;
}
void Inserisci(Tnome* &lista,char buffer[])
{
    int i;
    Tnome *supporto;

    supporto = (Tnome*) calloc(1,sizeof(Tnome));

    supporto->succ=lista;
    supporto->p = (char*)calloc(strlen(buffer)+1,sizeof(char));

    for(i=0;buffer[i]!='\0';i++)
       supporto->p[i] = buffer[i];
    supporto->p[i] = 0;
    lista=supporto;

}
void Inizializza(char array[],int dim)
{
    int i;
    for(i=0;i<dim;i++)
    array[i]=0;
}
void StampaLista(Tnome* lista)
{

    while(lista!=NULL)
    {
       cout << lista->p << endl;
       lista = lista->succ;


    }
}
Come già detto,il programma funziona,a patto che nel file siano contenuti un numero di nomi limitato...infatti avendo un file contenente circa 5000 nomi,provando a stampare la lista con la funzione stampalista...l'output non è quello che si ci potrebbe aspettare (in particolare l'ultima parola del file non coincide con la prima parola della console..e non riesco proprio a capirne il motivo
Potreste aiutarmi?
Vi allego anche il file .. testo.zip
Grazie.
__________________
Il mio pc:
Scheda madre:MSI Amethyst-m; Processore:amd sempron 3400+;2000Mhz
Ram:ddr-sdram 1024Mb; Scheda grafica:Nvidia geforce 6200SE Turbocache; Scheda audio:AC'97 Audio controller
Sistema Operativo:Windows 7 32bit

Ultima modifica di Marco95 : 10-03-2013 alle 17:25.
Marco95 è offline   Rispondi citando il messaggio o parte di esso