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

    [C++] Problema con Array

    Buonasera ragazzi,
    ho questo programma che dovrebbe inserire un tot di libri (3 per semplicità) e se esiste già il libro mi da errore. Bene il problema è che ciò non avviene. Non so dove mettere il ciclo for (penso che sia questo il problema, ma ormai ho dei dubbi su tutto). Spero che qualcuno di voi mi possa aiutare, dare una idea, qualsiasi cosa!


    codice:
    #include<iostream>
    #include<fstream>
    #include<stdio.h>
    
    
    using namespace std;
    
    
    int acquisto();
    
    
    class libro
    {
    	public:
    		int quantita;
    		string titolo="";
    		string autore="";
    };
    
    
    int main()
    {
    	int scelta;
    	do
    	{
    		cout<<"1.Acquisto";
    		cout<<"\n2.Vendita";
    		cout<<"\n3.Esci";
    		
    		cout<<"\nOperazione da eseguire:";
    		cin>>scelta;
    		
    		switch(scelta)
    		{
    			case 1:
    				acquisto();
    				break;
    			case 2:
    				break;
    		}
    		system("PAUSE");
    	} while(scelta!=3);
    	cout<<"\nFine!\n";
    	return 0;
    }
    
    
    
    
    int acquisto ()
    {
    	int i;
    
    
    	libro a[3];
    	ofstream salva;
    	salva.open("libro.txt",ios::app);
    	
    	string nuovo="";
    	cout<<"\nInserire titolo:";
    	cin>>nuovo;
    	
    	bool libroSi=false;
    	ifstream leggi;
    	leggi.open("libro.txt");
    	
    	while(!leggi.eof())
    	{
    		leggi>>a[i].titolo;
    		leggi>>a[i].autore;
    		leggi>>a[i].quantita;
    		
    		if(a[i].titolo==nuovo)
    		{
    			libroSi=true;
    		}
    	}
    	leggi.close();
    	
    	if(libroSi==true)
    	{
    		cout<<"\nErrore!";
    		return 0;
    	}
    	else
    	{
    		for(int i=0;i<3;i++)
    	{
    		cout<<"\nTitolo:";
    		cin>>a[i].titolo;
    		cout<<"\nAutore:";
    		cin>>a[i].autore;
    		cout<<"\nQuantita:";
    		cin>>a[i].quantita;
    		
    		
    		salva<<a[i].titolo<<endl;
    		salva<<a[i].autore<<endl;
    		salva<<a[i].quantita<<endl;
    	}
    	
    	}
    	salva.close();
    
    
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ne avevamo già parlato in un altro tuo thread.

    Ti avevo detto che NON devi aprire il file in scrittura e in lettura contemporaneamente.

    NON aprire il file in scrittura ma SOLO in lettura per cercare il titolo, poi chiudi il file e se non hai trovato il libro, lo APRI in scrittura per aggiornarlo.

    Se non fai quello che ti si consiglia, riproponendo sempre lo stesso codice con lo stesso errore, non finirai mai ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ciao Oregon, il codice dell'altra volta l'ho corretto ed è il seguente:

    codice:
    #include <iostream>
    #include <fstream>
    #include <stdio.h>
    
    
    
    
    using namespace std;
    
    
    int nuovo ();
    
    
    class libro
    { public:
        string titolo="";
        string autore="";
    };
    
    
    
    
    int main ()
    {
        int scelta;
        do
        {
            system("CLS");
            cout<<"1.Inserisci Libro"<<endl;
            cout<<"\nOperazione da eseguire:";
            cin>>scelta;
            switch(scelta)
            {
                case 1:
                nuovo();
                 break;
            }
            system ("PAUSE");
        }
        while(scelta!=2);
        return 0;
    }
    
    
    
    
    int nuovo ()
    {
        libro l;
    
    
        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>>l.titolo;
            leggi>>l.autore;
    
    
            if(l.titolo==nuovo)
            {
                libroSi=true; 
                
            }
            }
        leggi.close();
    
    
        if(libroSi==true)
        {
            cout<<"\nERRORE!\n";
            return 0;
    
    
        } 
        else
        {
            
            ofstream salva;
            salva.open("b.txt", ios::app);
                
        
            
                l.titolo=nuovo;
                cout<<"\nAutore:";
                cin>>l.autore;
                cout<<"\n----------\n";
                
                salva<<nuovo<<endl;
                salva<<l.autore<<endl;
                
                salva.close();
                
        }
    }

  4. #4
    Il mio problema ora è differente, perchè vado ad utilizzare l'allocazione dinamica, imponendo un tot di libri che devono essere aggiunti.
    E non mi rileva l'errore del libro con lo stesso titolo

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quote Originariamente inviata da TurtleNine Visualizza il messaggio
    Il mio problema ora è differente, perchè vado ad utilizzare l'allocazione dinamica, imponendo un tot di libri che devono essere aggiunti.
    E non mi rileva l'errore del libro con lo stesso titolo
    Ti ho già risposto .... hai letto? Anche il codice dell'altra volta ha questo problema.

    Se correggi la questione del file aperto in scrittura all'inizio, ne continuiamo a parlare ... altrimenti non so cosa dirti ancora.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ti ho già risposto .... hai letto? Anche il codice dell'altra volta ha questo problema.

    Se correggi la questione del file aperto in scrittura all'inizio, ne continuiamo a parlare ... altrimenti non so cosa dirti ancora.
    Scusami un attimo, vedi che il codice dell'altra volta, l'ho modificato (è il secondo codice che ti ho inviato) e parte tranquillamente così

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quote Originariamente inviata da TurtleNine Visualizza il messaggio
    Scusami un attimo, vedi che il codice dell'altra volta, l'ho modificato (è il secondo codice che ti ho inviato) e parte tranquillamente così
    Veramente io vedo ancora due volte le righe

    ofstream salva
    ;
    salva
    .open("b.txt",ios::app);

    e ti avevo suggerito dei eliminare le prime.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Se tolgo quelle due linee il programma si blocca, non mi fa fare niente, mi fa inserire solo il titolo e stop non mi fa andare avanti, cliccando anche 20 volte invio non fa niente! Se provi il mio codice (quello dell'altra volta) puoi verificare tu stesso che parte e ti fa fare tutto normalmente

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Lasciamo perdere ...

    Errori :

    1) quando fai la ricerca non devi utilizzare la struttura e l'array con l'indice.
    Utilizza solo delle stringhe titolo, autore e un intero per la quantità.

    2) quando scrivi sul file, non devi riscrivere tutti i dati dell'array (non sono sempre 3).
    Apri il file in append e scrivi SOLO i nuovi dati.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.