PDA

View Full Version : Ciclo infinito????


NA01
21-05-2004, 17:45
vi pongo questo problema che mi sembra alquanto strano.....
devo contare i file .jpg contenuti in una cartella.
probabilente esistono metodi migliori, ma mi sono inventato questo:


unsigned int nfoto(){
char buffer[100];
ifstream in("temp");
unsigned int num_foto = 0;
system("ls Foto/ --color=no > temp");
while(!in.eof()){
in.getline(buffer,100,'\n');
num_foto++;
}
num_foto--;
in.close();
return num_foto;
}


così funziona perfettamente, ma appena provo a compilare questo


unsigned int nfoto(){
char buffer[100];
ifstream in("temp");
unsigned int num_foto = 0;
system("ls Foto/*.jpg --color=no > temp");
while(!in.eof()){
in.getline(buffer,100,'\n');
num_foto++;
}
num_foto--;
in.close();
return num_foto;
}


il programma si impalla e continua un ciclo infinito di lettura :eek:
genera il file correttamente, ma non esce più dal ciclo :wtf:
perchè mai una cosa del genere??????
faccio notare che ho aggiunto solo *.jpg al comando ls (e il file si genera correttamente)

ciao

NA01
21-05-2004, 17:51
ovviamente se conoscete un modo per contare i file senza tutto questo casino forse è meglio :D (piattaforma linux compilatore g++)


cmq sono curioso del motivo percui c'è questa discrepanza nell'esecuzione di due listati praticamente identici

ciao

McK
21-05-2004, 17:54
Non ho la più pallida idea di quale sia il linguaggio che usi, però puoi provare a fare una cosa di questo tipo:

unsigned int nfoto(){
char buffer[100];
ifstream in("temp");
unsigned int num_foto = 0;
system("ls Foto/ --color=no > temp");
while(!in.eof()){
if (estensionedelfile="jpg") {
in.getline(buffer,100,'\n');
num_foto++;
}
}
num_foto--;
in.close();
return num_foto;
}

in questo modo la sintassi è simile a quella del programma che ti funziona (quindi niente ciclo infinito) e i file jpg li vai a selezionare dopo.

Ciao, McK

NA01
21-05-2004, 18:03
if (estensionedelfile="jpg") {

ho una mezza idea su come farla (credo di dover usare getline fino a '.' e poi leggere l'estenzione), ma sarebbe un'ulteriore complicazione di un lavoro che dovrebbe essere semplicissimo :(


ciao

cionci
21-05-2004, 18:34
Perchè non provi ad eseguire la system prima di aprire lo stream ?

ifstream in("temp");

NA01
21-05-2004, 18:40
ovviamente non ne sbagli una :mano: :winner:
la mia sequenza effettivamente era priva di logica, ma che diavolo cambia tra i due listati???
mi incuriosice questa cosa :D

grazie mille

ciao

cionci
21-05-2004, 18:43
Niente ;) Ma te fidati...non te lo chiedere... :D