PDA

Visualizza la versione completa : [C++] cin birichino e .close() bischero


DesertBoyOfSun
25-09-2008, 19:45
Salve gente,
allora ho notato a malincuore che la funzione cin quando riceve una stringa con degli spazi, al primo spazio termina la stringa da acquisire... Dunque esiste un metodo alternativo oltre allo scanf per ovviare il problema?

e inoltre

siamo sicuri che la funzione .close() associata a uno stream file chiuda il file definitivamente? No perché a me lo tiene ancora aperto fino a che il programma non si chiude...eppure non é logico...

fatemi sapere ciao!

oregon
25-09-2008, 19:55
1)

cin.getline(str);

2)

Mostra il codice ...

shodan
25-09-2008, 20:50
Originariamente inviato da DesertBoyOfSun
siamo sicuri che la funzione .close() associata a uno stream file chiuda il file definitivamente? No perché a me lo tiene ancora aperto fino a che il programma non si chiude...eppure non é logico...


Il tuo problema è un problema tipico chesi verifica quando si usa un input stream, lo si chiude e lo si riapre(come nel codice dell'altro thread).
In quel caso rimane settato il flag eofbit che di fatto rende lo stream inusabile.
il problema si risolve con un ifstream::clear() che riporta lo stream in good state.
Eventualmente aggiungi anche un ifstream::ignore(std::numeric_limits<long>::max()) prima della nuova chiamata ad ifstream::open(...)

DesertBoyOfSun
25-09-2008, 22:43
Originariamente inviato da shodan
Il tuo problema è un problema tipico chesi verifica quando si usa un input stream, lo si chiude e lo si riapre(come nel codice dell'altro thread).
In quel caso rimane settato il flag eofbit che di fatto rende lo stream inusabile.
il problema si risolve con un ifstream::clear() che riporta lo stream in good state.
Eventualmente aggiungi anche un ifstream::ignore(std::numeric_limits<long>::max()) prima della nuova chiamata ad ifstream::open(...)

Grazie per avermi trovato una soluzione ma a fini pratici se il mio stream si chiama file_encoded per esempio, come faccio a chiuderlo definitivamente?

shodan
25-09-2008, 23:04
E' sufficiente la ifstream::close().
Cosa ti da l'impressione che non lo faccia?

DesertBoyOfSun
25-09-2008, 23:10
Originariamente inviato da shodan
E' sufficiente la ifstream::close().
Cosa ti da l'impressione che non lo faccia?

perché mi da un errore di compilazione.......
se faccio invece file.clear(); no..... cioé non ho capito come devo imposare il codice per cm mi hai detto tu...

MItaly
25-09-2008, 23:14
Scrivendo che devi chiamare ifstream::close() intende dire che devi richiamare il metodo close sul tuo oggetto di tipo ifstream, per cui se il tuo oggetto si chiama file dovrai usare


file.close();
.
Comunque ti ripropongo la domanda di shodan:

Cosa ti da l'impressione che non lo faccia?

DesertBoyOfSun
25-09-2008, 23:48
Ok grazie. Dunque non lo fa x 2 motivi:
-quando usavo gli stream condivisi nelle funzioni codifica/decodifica dovevo usare una funzione, chiuder il programma e poi riavviarlo per usare l'altra altrimenti non funzionava correttamente.
-in scondo luogo non potevo spostare un file con il programma aperto anche se il programma aveva gia usato la funzione .close()...il che mi ha fatto venire il sospetto...

.clear() quindi rimane l'unica soluzione?

Loading