Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Non legge While
Forum - C/C++ - Non legge While

Avatar
oliverissimo (Normal User)
Newbie


Messaggi: 11
Iscritto: 14/05/2010

Segnala al moderatore
Postato alle 1:55
Venerdì, 18/06/2010
Ciao a tutti, eccomi di nuovo con uno dei miei problemi :D

Questo e' una funzione che stampa due file .txt e chiede se vuoi sovrascrivere "fileo" con "filed", in caso che la risposta sia affermativa creo un file di output "new_file" con il nome di imprse.txt (lo stesso di fileo) in modo da sostituirlo e poi sovrascrivere "new_file" con quello che c'e' dentro a "filed".
Non riesco pero' a capire perche' non entra dentro al while (vedi "<--").

Premetto anche che nei file CI SONO SICURAMENTE CARATTERI quindi il problema non sta' che in filed.get(c) non c'e' nulla da leggere creando una condizione del while falsa. :nono:

Ecco il codice:
Codice sorgente - presumibilmente C++

  1. void stampa_dati ( char file_originale[11], char buffer_depurato[7] )
  2. {
  3.         char yon;
  4.         char c;
  5.        
  6.         ifstream fileo;
  7.         ifstream filed;
  8.        
  9.         fileo.open(file_originale);
  10.         filed.open(buffer_depurato);
  11.        
  12.         cout<<"File originale:\n";
  13.        
  14.         while(fileo.get(c))
  15.         {
  16.                 cout<<c;
  17.                 }
  18.                
  19.         cout<<"\n\nFile depurato:\n";
  20.        
  21.         while(filed.get(c))
  22.         {
  23.                 cout<<c;
  24.                 }      
  25.  
  26.         do
  27.         {
  28.                 cout<<"\n\nVuoi sovrascrivere [S/N]? ";
  29.                 cin>>yon;
  30.        
  31.                 if (yon=='S')  
  32.                 {
  33.                         ofstream new_file;
  34.                
  35.                         new_file.open("imprese.txt");
  36.                
  37.                         while (filed.get(c))          // <-- problema
  38.                         {
  39.                                 new_file<<c;
  40.                                 }
  41.        
  42.                         new_file.close();
  43.                
  44.                         cout<<"\nFile sovrascritto con successo.";
  45.                         }
  46.                
  47.                 if (yon=='N')
  48.                 {
  49.                         cout<<"\nFile non sovrascritto.";
  50.                         }
  51.                 if (yon!='S' && yon!='N')
  52.                 {
  53.                         cout<<"\nCarattere non ammesso.";
  54.                         }
  55.                        
  56.                 }
  57.                 while (yon!='S' && yon!='N');
  58.                
  59.         fileo.close();
  60.         filed.close();
  61.         remove(buffer_depurato);
  62.         }
  63.  
  64. //char OF[11]={'i','m','p','r','e','s','e','.','t','x','t'};
  65. //char BD[7]={'d','e','p','.','t','x','t'};
  66. //stampa_dati(OF,BD);



Grazie mille :)


640 Kb dovrebbero essere abbastanza per chiunque.

Un programma dieci volte più lungo è circa cento volte più complicato da scrivere.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 8:05
Venerdì, 18/06/2010
La get fallisce perché la open precedente era fallita.

E questo perché il nome del file non è passato correttamente.

In una stringa devi considerare il terminatore NUL (0 binario) e quindi un carattere in più alla fine della stessa.

Inoltre, non devi inizializzare le stringhe in quel modo e se sono costanti le puoi passare direttamente.

Quindi, per riassumere, devi fare queste modifiche

1) indicare più caratteri per i nomi dei file, anche se non sono tutti usati, ad esempio

void stampa_dati ( char file_originale[50], char buffer_depurato[50] )

2) usare delle costanti stringa quando richiami la funzione, ovvero

stampa_dati("imprese.txt", "dep.txt");

Inoltre non dovresti eseguire le open del file senza controllare che siano andate a buon fine ...

Ultima modifica effettuata da nessuno il 18/06/2010 alle 8:06


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote