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

    [C++] Non Confronta con tutti i nomi salvati nel File!

    Salve ragazzi,
    Ho un problema con questo programma.
    Il programma deve inserire un tot di libri all'interno di uno scaffale(per semplicità ho supposto 4libri) e se inserisco un libro con lo stesso titolo di uno di quelli presenti mi da errore, dicendomi che è già presente.
    Il problema è che mi confronta il titolo che aggiungo solo con il primo titolo aggiunto e non con tutti i titoli presenti sul mio file.
    Per favore aiutatemi, perchè non so più dove sbattere la testa!

    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
        {
        cout« "1.Inserisci: ";
        cout« "Operazione da eseguire:";
        cin»scelta;
        switch (scelta)
            {
                case 1:
                 nuovo();
                 break;
            }
            system ("PAUSE");
        }
        while(scelta!=2);
    }
    
    
    int nuovo ()
    {
        ofstream salva;
        salva.open("Libreria.txt", ios::app);
        libro l;
        for (int i=0;i<3;i++)
        {
            ifstream leggi;
            leggi.open("Libreria.txt");
            leggi»l.titolo;
            leggi»l.autore;
            string nuovo="";
            cout«"Titolo: " « endl;
            cin»nuovo;
            if(nuovo!=l.titolo)
            {
                cout«"Autore: " « endl;
                cin»l.autore;
                l.titolo=nuovo;
                
                salva«l.titolo«endl;
                salva«l.autore«endl;
            }
            else
            {
                cout«"Errore!"«endl;
                return 0;
            }
            leggi.close();
        }
        salva.close();
        return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non puoi aprire il file sia in append che in lettura.

    Aprilo prima in lettura, fuori dal ciclo, e nel ciclo fai la ricerca leggendo dal primo all'ultimo libro.

    Se non l'hai trovato, alla fine del ciclo, apri il file in append e lo aggiungi, altrimenti visualizza un messaggio d'errore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non puoi aprire il file sia in append che in lettura.

    Aprilo prima in lettura, fuori dal ciclo, e nel ciclo fai la ricerca leggendo dal primo all'ultimo libro.

    Se non l'hai trovato, alla fine del ciclo, apri il file in append e lo aggiungi, altrimenti visualizza un messaggio d'errore.
    Ciao, ho fatto come mi hai detto, però il mio problema non sembra risolto.
    Ho aperto il programma, inserito un libro dal titolo(lun) e dall'autore (nov) e mi dava già errore dicendo che era già presente questo libro, cosa non vera essendo il primo inserito e il file era vuoto.
    Dopo ho riaperto ho inserito il secondo libro dal titolo "mart" e questo è quello che è successo:
    Cattura.JPG

    ti riporto il codice modificato, non so davvero più che fare, ho provato a fare modifiche però niente, scusami il disturbo



    codice:
    int nuovo ()
    {
    	libro l;
    	ifstream leggi;
    	leggi.open("a.txt");
    	
    	leggi>>l.titolo;
    	leggi>>l.autore;
    	
    	for(int i=0; i<3; i++)
    	{
    	
    	string nuovo="";
    	cout<<"\nInserire Titolo, per verificare se presente:";
    	cin>>nuovo;
    	
    	while(!leggi.eof())
    	{
    		
    		leggi>>l.titolo;
    		leggi>>l.autore;
    		
    		if(nuovo!=l.titolo)
    		{
    			ofstream salva;
    			salva.open("a.txt",ios::app);
    			
    			l.titolo=nuovo;
    			cout<<"\nAutore:";
    			cin>>l.autore;
    			cout<<"\n------------------------\n";
    			
    			salva<<l.titolo<<endl;
    			salva<<l.autore<<endl;
    			
    			salva.close();
    		}
    		else
    		{
    			cout<<"\nERRORE! FILE GIA' PRESENTE!!\n";
    			return 0;
    		}
    	}
    	}
    	leggi.close();
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ci siamo capiti ... il codice che hai scritto non è come ti ho suggerito ... Schematicamente

    Chiedi il nuovo titolo
    Imposta un flag a falso (libro non trovato)
    Apri il file in lettura
    Leggi il prossimo record (fino a eof)
    Se il titolo letto è uguale al nuovo imposta flag a vero
    Chiudi il file in lettura al termine del ciclo
    Se il flag è vero, visualizza "libro già presente" e termina
    ... altrimenti apri il file in append, scrivi i nuovi dati, chiudi il file.
    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.