PDA

Visualizza la versione completa : [C++] Non Confronta con tutti i nomi salvati nel File!


TurtleNine
23-10-2016, 21:06
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!


#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;
}

oregon
23-10-2016, 23:57
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.

TurtleNine
24-10-2016, 15:22
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:
27748

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




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();
}

oregon
24-10-2016, 15:50
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.

Loading