Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    3

    char in più nello stream letto da file

    salve a tutti vi scrivo oggi perchè ho un problema veramente strano a cui non riesco proprio risolvere.
    sto studiando c++ per un esame, non è il linguaggio che uso di solito ma non ho avuto grandi problemi.
    il fatto è questo...devo leggere un file .txt "criptarlo" tramite una matrice e scriverlo in un altro .txt poi infine visualizzarli entrambi a schermo...un gioco da ragazzi direte voi, così pensavo anche io.
    scrivo il programma, l'algoritmo nel complesso funziona quando per caso noto che nel testo criptato c'erano 2 lettere in più; a questo punto faccio andare istruzione per istruzione una alla volta e vedo che quando vado a leggere carattere per carattere con questa funzione :
    codice:
    char a;
    	fstream stampa;
    	stampa.open(nome, ios::in);
    	while(!stampa.eof())
    	{
    		stampa.get(a);
    		cout << a;
    	}
    	cout << endl;
    	stampa.close();
    guardando lo stream alla fine del file c'è un doppione dell'ultima lettera e quindi quando va a criptare aggiunge una lettera e quando lo visualizza ne aggiunge un altra.

    non vedo nulla di strano nella funzione che ho scritto però ho notato che se metto semplicemente stampa >> a, non lo stampa (nello stream c'è lo stesso però è come se non lo contasse), però visto che >> ignora gli spazi ho dovuto usare la get

    vi posto uno screenshoot di quello che vedo


    avete qualche idea???

    ps. qui uso visual studio ma ho fatto la prova anche con dev c++ e da lo stesso "errore"

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Imposta così il ciclo

    codice:
    	stampa.get(a);
    	while(!stampa.eof())
    	{	
    		cout << a;
    		stampa.get(a);
    	}
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    3
    grazie per la risposta velocissima...comunque più che la soluzione cercavo una spiegazione del perchè accade

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Semplice ... la feof diventa vera solo *dopo* una get che fallisce, ma a quel punto hai già visualizzato il carattere precedente
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    3
    ok tutto chiaro...dopo aver letto la tua risposta ho pensato anche a un altra modifica
    codice:
    	while(stampa.get(a);)
    	{	
    		cout << a;
    	}
    d'ora in poi userò questa di condizione penso sia più "sicura"

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.