PDA

View Full Version : [c++] while concatenati


AngeL)
07-09-2006, 14:02
scrivendo un programma che doveva generare tutte le possibili conbinazioni di nomi e aggettivi prendendoli da due file e scriverle su un altro file ho riscontrato un errore.

questi sono i due file:
(nomi.txt)
Fiore
Casa
----
(aggettivi.txt)
Rosso
Giallo

Questo è il programma
(programma.cpp)
string nome,aggettivo;
ofstream com("combinazioni.txt");
ifstream agg("aggettivi.txt");
ifstream nom("nomi.txt");
while(getline(aggettivi,aggettivo))
{
while(getline(nomi,nome))
{
com << nome << " " << aggettivo << endl;
}
}

Il problema è che sul file combinazioni.txt vengono fatte solo le combinazioni con il primo aggettivo
Credo che il problema risieda nel fatto che il getline del secondo while vale true alla prima esec del primo while, ma false dopo, a causa del raggiungimento dell'EOF
esiste un modo per evitare che questo accada? :help:

cionci
07-09-2006, 16:31
Per vedere se il problema è quello inserisci un invio in fondo ai file di testo...

AngeL)
08-09-2006, 11:41
Per vedere se il problema è quello inserisci un invio in fondo ai file di testo...
l'invio gia c'è perchè quando scrivo sul file automaticamente faccio finire la scringa con "\n".
non capisco in cosa possa aiutare questo invio :mbe:

edit: ho pensato di risolvere concatenando due for, ma poi dovrei conoscere la lunghezza esatta in righe del file, che non so come ricavare

Qu@ker
09-09-2006, 13:12
#include <fstream>
#include <string>

int main(void)
{
std::string nome, aggettivo;
std::ofstream com("c.txt");
std::ifstream agg("a.txt"), nom("n.txt");
while (getline(agg, aggettivo)) {
while (getline(nom, nome)) {
com << nome << " "
<< aggettivo << std::endl;
}
nom.clear();
nom.seekg(0);
}
}

AngeL)
09-09-2006, 13:13
grazie qu@ker :)

AngeL)
11-09-2006, 09:17
visto che la mia idea era di fare questo programma in perl, ma poi ci ho rinunciato per il problema del secondo while, lho scritto in c++ perche conosco questo linguaggio meglio del perl, ma ho avuto lo stesso problema. ora vorrei riscriverlo in perl e vorrei sapere se esistono degli equivalenti di clear e seekg in perl.
grazie ancora ^^