c'erano degli errori, ho corretto e provato, così funziona.
codice:#include <cstdlib> #include <iostream> #include <fstream> #define MAXLEN 100 //lunghezza massima delle stringhe di nomi,cognimi,domini. using namespace std; struct chunk { chunk() { data = NULL; next = NULL; } char* data; chunk* next; }; struct list //struttura per le liste di valori per campo { list() //inizializza la lista { first = NULL; count = 0; } chunk* first; chunk* last; int count; //numero di valori nella lista char* FindString(int ID) //trova il valore con id ID { if(ID == 0) return(first->data); int i = 0; chunk* c = first; while(i < ID) {c = c->next; i++;} return(c->data); } void AddValue(char* value) { chunk* c = new chunk; c->data = new char[strlen(value)+1]; memcpy(c->data,value,strlen(value)+1); if(count == 0){ first = c; last = first; } else {last->next = c; last = last->next;} count++; } }; list* CreaListaDaFile(char* fname) { list* lista = new list(); ifstream fin(fname); char buffer[MAXLEN]; fin.getline(buffer,MAXLEN); if(strlen(buffer)>0) lista->AddValue(buffer); while(!fin.eof()) { fin.getline(buffer,MAXLEN); lista->AddValue(buffer); } fin.close(); return(lista); } int main(int argc, char *argv[]) { list* nomi = CreaListaDaFile("C:/nomi.txt"); list* cognomi = CreaListaDaFile("C:/cognomi.txt"); list* domini = CreaListaDaFile("C:/domini.txt"); //nomi.cognomi.domini int campi[3]; //creo 3 campi, ognuno è un numero che va da 0 all'indice dell'ultimo valore della sua lista (==sua_lista.count-1, se diamo al primo indice 0) campi[0] = 0; campi[1] = 0; campi[2] = 0; //ho messo l'indice di ogni campo al primo della loro lista. //campo0 è quello più a sinistra, poi viene 1 e 2. while(true) { //finchè il campo più a sinistra non ha raggiunto il fondo della sua lista cout << nomi->FindString(campi[0]) << "." << cognomi->FindString(campi[1]) << "@" << domini->FindString(campi[2]) << endl; campi[2]++; if(campi[2] == domini->count) { campi[2] = 0; campi[1]++; if(campi[1] == cognomi->count) { campi[1] = 0; campi[0]++; if(campi[0] == nomi->count) { break; } } } } system("PAUSE"); return EXIT_SUCCESS; }

Rispondi quotando