Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c++] dubbio su eof()

  1. #1

    [c++] dubbio su eof()

    Salve a tutti, stavo facendo un programma che interagisce con dei file.
    Mi è quindi venuto un dubbio sull'utilizzo di eof().
    se io avessi un ciclo while(file.eof()){}, il cursore aumenta di una posizione ad ogni ciclo, giusto?
    quindi, se ad un certo punto dovessi saltare una parte di file, potrei spostare semplicemente il cursore più avanti? Faccio un esempio con uno pseudolinguaggio
    codice:
    while(file.eof)
    {
       if(hai stampato 100 caratteri)
       {
          riposiziona il cursore 20 caratteri dopo;
            
       }
      ottieni il carattere e stampalo a schermo;
    }
    in questo modo, il programma dovrebbe stampare 100 caratteri, saltarne 20 e poi continuare fino alla fine.

    Funziona?

    Grazie mille per l'attenzione che mi avete dedicato.
    Ciao
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    il cursore aumenta di una posizione ad ogni ciclo, giusto?
    No. eof() controlla soltanto se è stata raggiunta la fine del file. Gli avanzamenti sono impliciti in una lettura oppure con un posizionamento esplicito.
    Funziona?
    Solo se all'interno dell'if espliciti un riposizionamento.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Credo che, comunque, in quel modo non funzionerebbe affatto.
    Dalla documentazione, eof() ritorna TRUE se è stata raggiunta la fine del file. Quindi in quel modo, se il file non è vuoto, nel while non ci entra proprio.


    codice:
    while( !file.eof() ) {
       ...
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    eof() controlla soltanto se è stata raggiunta la fine del file
    Su che cosa si basa la funzione eof() per capire se la lettura del file è finita? e soprattutto, come mai gli avanzamenti sono impliciti in una lettura? Io pensavo che la funzione eof() facesse progredire l'avanzamento del cursore, quindi ora mi sono cadute le fondamenta . Come fa il cursore a progredire?

    Grazie mille per avermi aiutato.

    Ciao
    Ultima modifica di g.b99pm10; 19-02-2014 a 15:35 Motivo: aggiunto ringraziamenti
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    e soprattutto, come mai gli avanzamenti sono impliciti in una lettura?
    Beh, quando leggi non muovi gli occhi e avanzi carattere per carattere?
    Stessa cosa fa la funzione di lettura del file: legge carattere per carattere (quindi avanzando) e mette il risultato in un buffer. Quando i caratteri letti sono minori della dimensione del buffer si è raggiunta la fine del file, quindi viene settato il flag di EOF che sarà restituito dalla funzione eof() che indica che il file è finito.

    Da notare che nella pratica il controllo su eof() non viene praticamente mai eseguito. E' preferibile testare good() per verificare che lo stream sia valido (lo stream infatti potrebbe essere invalidato anche da errori dovuti a caratteri non previsti).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    grazie mille per l'attenzione, ora ho capito. Chiari come sempre

    ciaooo
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

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 © 2025 vBulletin Solutions, Inc. All rights reserved.