Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447

    [C++] Sovrascrittura File

    Ho creato questo programma banale che salva i movimenti su un file e ne calcola il saldo, per esercitarmi. Tuttavia non riesco a risolvere un problema, ovvero che ogni volta che lancio il programma, il file in cui salvavo i movimenti viene sovrascritto da uno nuovo.

    Non ho molta esperienza (sono alle prime armi) quindi se avete delle illuminazioni su come migliorare il codice sono ben accette.

    codice:
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
        /* Dichiarazione Funzioni */
    
    void fileCreator();
    void titol();
    void menu();
    void insertChar();
    double saldo();
    
        /* Dichiarazione Variabili Globali */
    
    double tot = 0;
    
    int main()
    {
        fileCreator();
        titol();
        menu();
    
        return 0;
    }
    
    
    
        /* Apertura e Creazione File */
    
    void fileCreator()
    {
        fstream file;
    
        file.open("testo.txt", ios::out);
        file << "CONTABILITA'"
             << endl
             << endl
             << "DATA" << "\t\t" << "MOVIMENTO" << "\t\t" << "CAUSALE" << "\t\t\t\t" << "SALDO";
        file.close();
    }
    
        /* Titolo */
    
    void titol()
    {
        cout << endl
             << "**GESTIONE CONTABILITA'**"
             << endl;
    }
    codice:
        /* Menu Principale */
    
    void menu()
    {
        int status;
    
        cout << endl
             << "1. Inserire un nuovo movimento.\n"
             << "2. Visualizza il Saldo.\n"
             << "0. Esci\n"
             << endl
             << "Inserisci la tua scelta: ";
        cin >> status;
        cout << endl;
    
            switch(status)
                {
                case 1:
                    insertChar();
                    menu();
                    break;
                case 2:
                    cout << "Saldo corrente: " <<  saldo() << " Euro." << endl;
                    menu();
                case 0:
                    break;
                default:
                    cout << endl
                         << "ERRORE: Inserisci un valore compreso tra 0 ed 1!"
                         << endl;
                    menu();
                    break;
                }
    }
    
    void insertChar()
    {
        int giorno, mese, anno;
        double mov = 0;
        fstream file;
    
        cout << "Inserisci la data del movimento(giorno/mese/anno)"
             << endl;
        cin >> giorno >> mese >> anno;
        cout << "Inserisci il movimento: ";
        cin >> mov;
    
        tot = tot + mov;
    
        file.open("testo.txt", ios::out | ios::app);
        file << endl
             << giorno << "/" << mese << "/" << anno
             << "\t"
             << mov
             << "\t\t"
             << "Funzione non disponibile"
             << "\t\t"
             << tot;
        file.close();
    }
    
    double saldo()
    {
        return tot;
    }

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Nella funzione fileCreator devi aprire il file in modalita ios::app (come peraltro fai nella insertChar())

    codice:
    file.open("testo.txt", ios::out|ios::app);

  3. #3
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Grazie, non ci avevo proprio pensato.
    Però avrei bisogno di un altro suggerimento. Quando devo inserire una data (relativa ad un movimento) sono obbligato a dover inserire ogni valore andando a capo in questo modo:
    10
    10
    2008

    mentre vorrei poter scrivere: 10/10/2008.

    Come posso fare?

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Aggiungi l'header <string>, poi:
    codice:
        cout << "Inserisci la data del movimento(giorno/mese/anno)" << endl;
        string data;
        getline(cin,data);
    Così puoi digitare la data come ti serve / comprese.

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.