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

    scrivere e salvare file

    ho scritto un programma in cui scrivo e creo un file,lo stampo a video e poi lo salvo.però c'è un problema:se lo scrivo e lo stampo solamente quando apro il file mi compare quello che ho scritto,se invece lo salvo anche, il file quando lo apro è vuoto,da che dipende?ecco il codice:
    codice:
    #include <iostream> 
    #include<fstream> 
    using namespace std;
     void stampa_video()//stampo a video il file ciao 
    {char c; 
    fstream vale; 
    vale.open("ciao",ios::in);
     while(vale.get(c)) cout<<c; 
    vale.close();} 
    void scrivi()//scrivo nel file ciao 
    { ofstream vale ("ciao");
     if (!vale){ cerr<<"No file"; }
     char c; 
    while(cin.get(c))
    { vale.put(c);
     if (c == 'x') break;} 
    vale.close();}
     void salva_file()//salvo il file ciao
     { fstream vale;
     char c; 
    vale.open("ciao",ios::out); 
    if(vale.good()){ while (vale.get(c)){
     vale<<c; } }
     vale.close(); } 
    int main()
     { cout<<"scrivi nel file: "<<endl; 
    scrivi(); 
    cout<<endl; 
    stampa_video();
     cout<<endl; 
    salva_file(); 
    system("pause"); 
    return 0; }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se usi ofstream, o fstream con ios:ut, devi specificare anche ios::app, altrimenti il file verrà azzerato. Però così se ci scrivi qualcosa, finisce in fondo al file.

    In alternativa usa fstream con gli specificatori: ios::in | ios:ut.
    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
    quindi se scrivo e salvo devo scrivere in un altro modo perchè sennò me lo azzera?salva_file devo correggere?

  4. #4
    Io in primo luogo correggerei l'indentazione... così com'è quel tuo codice è illeggibile.
    codice:
    #include <iostream>
    #include<fstream>
    
    using namespace std;
    
    void stampa_video()//stampo a video il file ciao
    {
        char c;
        fstream vale;
        vale.open("ciao",ios::in);
        while(vale.get(c)) cout<<c;
        vale.close();
    }
    
    void scrivi()//scrivo nel file ciao
    {
        ofstream vale ("ciao");
        if (!vale)
        {
            cerr<<"No file";
        }
        char c;
        while(cin.get(c))
        {
            vale.put(c);
            if (c == 'x') break;
        }
        vale.close();
    }
    
    void salva_file()//salvo il file ciao
    {
        fstream vale;
        char c;
        vale.open("ciao",ios::out);
        if(vale.good())
        {
            while (vale.get(c))
            {
                vale<<c;
            }
        }
        vale.close();
    }
    
    int main()
    {
        cout<<"scrivi nel file: "<<endl;
        scrivi();
        cout<<endl;
        stampa_video();
        cout<<endl;
        salva_file();
        system("pause");
        return 0;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A rigor di logica non salvi niente visto che leggi un carattere e lo rimetti dentro.
    Ho modificato un pò il codice in modo che siano chiari i passaggi.
    codice:
    #include <iostream> 
    #include <fstream> 
    #include <string>
    using namespace std;
    
    //stampo a video il file ciao 
    void stampa_video() { 
    	fstream vale("ciao",ios::in);
    	string line;
    	while (getline(vale,line)) 
    		cout << line << endl;
    	vale.close();
    } 
    
    // scrivo nel file ciao distruggendo ogni volta il contenuto.
    void scrivi_qualcosa () { 
    	ofstream vale ("ciao", ios::out );
     	if (!vale) { cerr<<"No file"; return; }
    	string line;
    	getline(cin,line);
    	vale << line;
    	vale.close();
    }
    
    // scrivo nel file ciao aggiungendo ogni volta il contenuto.
    void scrivi_qualcosa_altro() { 
    	fstream vale("ciao",ios::out | ios::app) ;
    	string line;
    	getline(cin,line);
    	vale<<line; 
    	vale.close(); 
    } 
    
    int main() { 
    	cout<<"scrivi nel file: "<<endl; 
    	scrivi_qualcosa(); 
    	cout<<endl;
    
    	stampa_video();
    	cout<<endl; 
    	scrivi_qualcosa_altro();
    
    	stampa_video();
    	cin.get();
    	return 0; 
    }
    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
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Il linguaggio va indicato anche nel titolo, come da Regolamento.

    Qui l'ho aggiunto io. Tienilo a mente per il futuro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.