Non so se hai visto ma ho già corretto.
In ogni caso visto che scrivere tutto su file era un lavoro da niente ho fatto anche quello.
Qui c'è il codice funzionante
codice:
#include <cstdlib>
#include <iostream>
#include <fstream>
#define MAXLEN 100 //lunghezza massima delle stringhe di nomi,cognimi,domini.
#define OUTPUT "C:/destinazione.txt" //il file dove verranno scritte le combinazioni
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.
int prints = 0;
FILE* file = fopen(OUTPUT,"wb");
char a_capo[2];
a_capo[0] = 13;
a_capo[1] = 10;
while(true)
{ //finchè il campo più a sinistra non ha raggiunto il fondo della sua lista
prints++;
cout << nomi->FindString(campi[0]) << "." << cognomi->FindString(campi[1]) << "@" << domini->FindString(campi[2]) << endl;
fwrite(nomi->FindString(campi[0]),sizeof(char),strlen(nomi->FindString(campi[0])),file);
fwrite(".",sizeof(char),1,file);
fwrite(cognomi->FindString(campi[1]),sizeof(char),strlen(cognomi->FindString(campi[1])),file);
fwrite("@",sizeof(char),1,file);
fwrite(domini->FindString(campi[2]),sizeof(char),strlen(domini->FindString(campi[2])),file);
//scrivo un a-capo!
fwrite(a_capo,sizeof(char),2,file);
//Stampo anche in un txt!
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;
}
}
}
}
fclose(file);
cout << "stampe: " << prints << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Purtroppo sono ancora minorenne e il tuo capo non potrebbe pagarmi per questo.. ma se vuoi puoi farlo te in nero.
Fai attenzione ai primi 2 define, MAXLEN e OUTPUT