Dovrebbe andare ma non ho controllatocodice:#include <cstdlib> #include <iostream> #include <fstream> #define MAXLEN 100 //lunghezza massima delle stringhe di nomi,cognimi,domini. 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 { int i = 0; chunk* c = first; while(i < ID) {c = c->next; i++;} return(c->data); } void AddValue(char* value) { chunk* c = new chunk; memcpy(c->data,value,strlen(value)+1); if(first == NULL) {first = c; last = first;} else {last->next = c; last = last->next;} count++; } }; list* CreaListaDaFile(char* fname) { list* lista = new list; FILE* file = fopen(fname); char c[2]; char str[MAXLEN+1]; int pos = 0; while(!feof(file)) { fread(c,sizoef(char),2,file); if(c[0] == 13 && c[1] == 10) // a capo! { str[pos] = NULL; lista->AddValue(str); pos = 0; } else { fseek(file,-2,SEEK_CUR); fread(str+pos,sizeof(char)1,file); pos++; } } fclose(file); return(lista); } using namespace std; 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; }