Prometheus ts
06-01-2007, 18:52
Salve a tutti , stavo facendo un piccolo programmino per imparare e mi sono bloccato a questo punto , cioè riesco a leggere e scrivere da file , tuttavia quando mi scrive il file , se sono presenti altre righe , le cancella e le sovrascrive con la nuova , in pratica non riesco a fargli capire di aggiungere nuove riche e non cancellare tutto ...consigli?
#include<iostream>//per cin , cout etc...
#include<fstream>//eof , fseek etc....
#include<iomanip>//per strcmp , confrontare stringhe
#include<conio.h>//per getch()
#include <stdlib.h>//per exit, atoi etc....
#include <string>//per usare getlineed il tipo stringa...
#include <vector>
// Our using statements.
using namespace std;
void inseriscicittà ();
// Our main() function.
int main()
{
//vettore di tipi string chiamato"listacittà"
vector<string> listacittà ;
string linea; // un oggetto può essere definito senza un valore di inizializzazione iniziale
// , nel qual caso il valore iniziale è una stringa vuota (lunghezza zero e nessun carattere):
ifstream città;//variabile di tipo ifstream chiamata "città"
int controllore=0; //valore che mi serve per il controllo del ciclo while successivo
// Next you will use the object's open function to open the text file.
città.open("Città.txt");//apre il file chiamato"Città"
// Validate that the file opened.
if(!città)
{
cout << "Errore , non è stato possibile aprire il file\a\n" << endl;
cout << "Premere un tasto per continuare..\a" << endl;
getch();
exit(1);
}
while(getline(città,linea))//fa anche un controllo , ossia se è vero che c'è
//una linea allora continua col while, getline prende il file e la riga.
{
listacittà.push_back(linea);// Aggiunge una linea alla fine del vettore col comando"pusch_back(oggettoaggiunto)"...
cout <<"["<<linea<< "]"<<endl;// Print out the string to the screen.
} ;
cout<<"numero città= "<< listacittà.size()<<endl;
città.close();
cout<<" vuoi aggiungere una nuova città?"<<endl;
while (controllore!=1)//il controllore mi serve per mantenere il loop sulla domanda.
{
switch ( getch() ) // con questo switch , confronto le risposte
//date con le lettere da inserire richieste.
{
case 'y' :
cout<<"\nDaccordo inserisci la nuova città\n "; // test numero uno.
inseriscicittà ( );
controllore=1;
break;
case 'n' :
cout<<"\nCome Desideri\n" ; // test numero due.
controllore=1;
break;
default :
cout<<"non ho capito puoi rispondere con un si = Y o un no = N?\n";// Process for all other cases.
controllore=0;
}
}
cout << "Premere un tasto per continuare...\a" << endl; // \a crea un suono.
getch();
return 0;
}
void inseriscicittà ( )
{
string nuovacittà;//variabile di tipo stringa che mi serve per inserire una nuova città.
ofstream Scrivicittà ("Città.txt");
if (Scrivicittà.is_open())
{
cout << "Inserisci una nuova città\n"<<endl;
cin>>nuovacittà ;
Scrivicittà.seekp (0, ios::end);
Scrivicittà<<(nuovacittà) ;
Scrivicittà.close();
}
else cout << "Unable to open file";
}
ovviamente per testarlo va creato un file texto con qualche città dentro....
#include<iostream>//per cin , cout etc...
#include<fstream>//eof , fseek etc....
#include<iomanip>//per strcmp , confrontare stringhe
#include<conio.h>//per getch()
#include <stdlib.h>//per exit, atoi etc....
#include <string>//per usare getlineed il tipo stringa...
#include <vector>
// Our using statements.
using namespace std;
void inseriscicittà ();
// Our main() function.
int main()
{
//vettore di tipi string chiamato"listacittà"
vector<string> listacittà ;
string linea; // un oggetto può essere definito senza un valore di inizializzazione iniziale
// , nel qual caso il valore iniziale è una stringa vuota (lunghezza zero e nessun carattere):
ifstream città;//variabile di tipo ifstream chiamata "città"
int controllore=0; //valore che mi serve per il controllo del ciclo while successivo
// Next you will use the object's open function to open the text file.
città.open("Città.txt");//apre il file chiamato"Città"
// Validate that the file opened.
if(!città)
{
cout << "Errore , non è stato possibile aprire il file\a\n" << endl;
cout << "Premere un tasto per continuare..\a" << endl;
getch();
exit(1);
}
while(getline(città,linea))//fa anche un controllo , ossia se è vero che c'è
//una linea allora continua col while, getline prende il file e la riga.
{
listacittà.push_back(linea);// Aggiunge una linea alla fine del vettore col comando"pusch_back(oggettoaggiunto)"...
cout <<"["<<linea<< "]"<<endl;// Print out the string to the screen.
} ;
cout<<"numero città= "<< listacittà.size()<<endl;
città.close();
cout<<" vuoi aggiungere una nuova città?"<<endl;
while (controllore!=1)//il controllore mi serve per mantenere il loop sulla domanda.
{
switch ( getch() ) // con questo switch , confronto le risposte
//date con le lettere da inserire richieste.
{
case 'y' :
cout<<"\nDaccordo inserisci la nuova città\n "; // test numero uno.
inseriscicittà ( );
controllore=1;
break;
case 'n' :
cout<<"\nCome Desideri\n" ; // test numero due.
controllore=1;
break;
default :
cout<<"non ho capito puoi rispondere con un si = Y o un no = N?\n";// Process for all other cases.
controllore=0;
}
}
cout << "Premere un tasto per continuare...\a" << endl; // \a crea un suono.
getch();
return 0;
}
void inseriscicittà ( )
{
string nuovacittà;//variabile di tipo stringa che mi serve per inserire una nuova città.
ofstream Scrivicittà ("Città.txt");
if (Scrivicittà.is_open())
{
cout << "Inserisci una nuova città\n"<<endl;
cin>>nuovacittà ;
Scrivicittà.seekp (0, ios::end);
Scrivicittà<<(nuovacittà) ;
Scrivicittà.close();
}
else cout << "Unable to open file";
}
ovviamente per testarlo va creato un file texto con qualche città dentro....