Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C++] cin birichino e .close() bischero

    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!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    1)

    cin.getline(str);

    2)

    Mostra il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [C++] cin birichino e .close() bischero

    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:pen(...)

  4. #4

    Re: Re: [C++] cin birichino e .close() bischero

    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:pen(...)
    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?

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E' sufficiente la ifstream::close().
    Cosa ti da l'impressione che non lo faccia?

  6. #6
    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...

  7. #7
    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
    codice:
    file.close();
    .
    Comunque ti ripropongo la domanda di shodan:
    Cosa ti da l'impressione che non lo faccia?
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.