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

    [C++] Non "funzionano" rename e remove

    Ciao ragazzi, non capisco perchè non vanno le funzioni rename e remove nel momento in cui vengono poste all'interno del mio int nuovo. Se la eseguo come funzione a parte (digitando 2) modifica tranquillamente il mio file b, mentre dal return (digitando 1) mi crea il file copia.

    codice:
    #include<iostream>
    #include<fstream>
    #include<stdio.h>
    #include<string>
    
    
    using namespace std;
    
    
    int nuovo();
    int aggiungi(); 
    int modifica();
    
    
    class libro
    {
        public:
        string titolo="";
        int quantita;
    };
    
    
    
    
    int main ()
    {
        int scelta;
        aggiungi();
        do
        {
            system("CLS");
            cout<<"1.Acquisto";
            cout<<"\n2.----";
            cout<<"\n3.Esci";
            cout<<"\nScegli:";
            cin>>scelta;
            
            switch(scelta)
            {
                case 1:
                    nuovo();
                    break;
                case 2:
                    modifica();
                    break;
            } system("PAUSE");
        } while(scelta!=3);
        cout<<"\n ciao \n";
        return 0;
    }
    
    
    
    
    int aggiungi()
    {   
        
        ifstream leggi;
        leggi.open("b.txt");
        
        if(leggi==NULL)
        {
            ofstream salva;
            salva.open("b.txt", ios::app);
            
            libro a[4];
            a[0].titolo="primo";
            a[1].quantita=20;
            a[2].titolo="secondo";
            a[3].quantita=30;
            
            salva<<a[0].titolo<<endl;
            salva<<a[1].quantita<<endl;
            salva<<a[2].titolo<<endl;
            salva<<a[3].quantita<<endl;
            
            salva.close();
        } 
    }
    
    
    
    
    int nuovo ()
    {
    
    
        
        libro a;
    
    
        ofstream salva;
        salva.open("b.txt",ios::app);
        
        string nuovo="";
        cout<<"\nInserire il nuovo titolo:";
        cin>>nuovo;
        
        bool libroSi=false; 
        ifstream leggi;
        leggi.open("b.txt");
        
    
    
        while(!leggi.eof())
        {
        
                
            leggi>>a.titolo;
            leggi>>a.quantita;
            
    
    
            if(a.titolo==nuovo)
            {
                libroSi=true; 
                
            }
        }
    
    
        leggi.close();
    
    
        if(libroSi==true)
        {
            cout<<"\nLibro gia presente\n";
            return modifica();
        } 
        else
        {
            int i;
            
            ofstream salva;
            salva.open("b.txt", ios::app);
                
        
            
                a.titolo=nuovo;
                cout<<"\nQuantita:";
                cin>>a.quantita;
                cout<<"\n----------\n";
                
                salva<<nuovo<<endl;
                salva<<a.quantita<<endl;
                
                salva.close();
                
        }
    }
    
    
    int modifica()
    {
        libro a;
        ifstream leggi;
        leggi.open("b.txt");
        if(leggi)
        {
        string nuovo="";
        cout<<"\nInserire il titolo del libro:";
        cin>>nuovo;
        
        ofstream posizioni("posizioni.txt");
        int posizione=0;
        
        while(!leggi.eof())
        {
            leggi>>a.titolo;
            leggi>>a.quantita;
            
            posizione++;
            
            if(nuovo==a.titolo)
            {
                cout<<"\nPosizione:"<<posizione<<endl;
                cout<<"\nQuantita:"<<a.quantita<<endl;
                
                posizioni<<posizione<<endl;
            }
        }
        leggi.close();
        posizioni.close();
        
        int daMod=0;
        cout<<"\nInserire la posizione del libro da inserire:";
        cin>>daMod;
        
        ofstream copia("copia.txt");
        ifstream leggi("b.txt");
        
        for(int i=0;i<daMod-1;i++)
        {
            leggi>>a.titolo;
            leggi>>a.quantita;
            
            copia<<a.titolo<<endl;
            copia<<a.quantita<<endl;
        }
        
            leggi>>a.titolo;
            leggi>>a.quantita;
            
            int nuovaQuantita;
            cout<<"\nQuantita da aggiungere:";
            cin>>nuovaQuantita;
            
            int nuovaDisp;
            nuovaDisp=nuovaQuantita+a.quantita;
            
            a.quantita=nuovaDisp;
            
            copia<<a.titolo<<endl;
            copia<<nuovaDisp<<endl;
            
            
            while(!leggi.eof())
            {
                leggi>>a.titolo;
                
                if(a.titolo!="")
                {
                    leggi>>a.quantita;
                    
                    copia<<a.titolo<<endl;
                    copia<<a.quantita<<endl;
                }
            }
            leggi.close();
            copia.close();
        }else
        cout<<"\nFile non trovato!";
        
        remove("b.txt");
        rename("copia.txt","b.txt");
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Subito prima della remove / rename assicurati che i file siano chiusi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Subito prima della remove / rename assicurati che i file siano chiusi.

    Ciao Oregon, ho risolto andando a chiudere il salva prima dell'if(libroSi==true).. però ora alla fine il secondo elemento me lo copia due volte. Ad esempio modifico il primo elemento e agiungo 100 elementi, la situazione che si presenta sul file è la seguente:

    primo
    120
    secondo
    30
    secondo
    30

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La questione è che l'eof viene rilevato solo DOPO la lettura di un dato. Modifica il codice di conseguenza.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    La questione è che l'eof viene rilevato solo DOPO la lettura di un dato. Modifica il codice di conseguenza.

    Mmm scusami non ho capito bene, puoi essere un po più chiaro

  6. #6
    Ciao Oregon, alla fine il programma parte tranquillamente, scrivendo nel seguente modo, solo che non c'è quasi nessuna differenza sostanziale al primo codice. Sai per caso il motivo? Forse è qualcosa che non riesco a vedere io!
    Ti scrivo solo l'int modifica(), perchè è l'unica che ho modificato!

    codice:
    {
    	libro a;
    	ifstream leggi;
    	leggi.open("b.txt");
    	
    	ofstream posizioni("posizioni.txt");
    	int posizione=0;
    	
    	string titoloCercato="";
    	cout<<"\nTitolo:";
    	cin>>titoloCercato;
    	
    	while(!leggi.eof())
    	{
    		leggi>>a.titolo;
    		leggi>>a.quantita;
    		
    		posizione++;
    		
    		if(a.titolo==titoloCercato)
    		{
    			cout<<"\nposizione"<<posizione<<endl;
    			
    			posizioni<<posizione<<endl;
    		}
    	}
    	leggi.close();
    	posizioni.close();
    	
    	int modificare=0;                
    	cout<<"\n posizione da modificare:";
    	cin>>modificare;
    	
    	ofstream copia("copia.txt");
    	leggi.open("b.txt");          
    	
    	
    	for(int i=0; i<modificare-1;i++)
    	{
    		leggi>>a.titolo;
    		leggi>>a.quantita;
    		
    		copia<<a.titolo<<endl;
    		copia<<a.quantita<<endl;
    	}
    	
    		leggi>>a.titolo;
    		leggi>>a.quantita;
    		
    		int nuovo;
    		cout<<"\nQuantita da aggiungere:";
    		cin>>nuovo;
    		
    		int pezzi=0;
    		pezzi=nuovo+a.quantita;
    		
    		copia<<a.titolo<<endl;
    		copia<<pezzi<<endl;
    		
    		while(!leggi.eof())
    		{
    			libro a;
    			leggi>>a.titolo;
    			
    			if(a.titolo!="")
    			{
    				leggi>>a.quantita;
    				
    				copia<<a.titolo<<endl;
    				copia<<a.quantita<<endl;
    			}
    		}
    		
    		leggi.close();
    		copia.close();
    		
    		remove("b.txt");
    		rename("copia.txt","b.txt");
    	
    }

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.