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.