ciao raga, mi potreste aiutare??
Questo mio programma, dovrebbe gestire una rubrica ( e' solo un inizio per adesso).
Funziona, va' tutto bene, il problema avviene quando, voglio fare la modifica, Inserendo '5'.
Dopodiche', viene chiesto di inserire il numero della persona, il campo da modificare, e la parola modificata.
Una volta inserito questi dati, il programma scrive su file, ma non mi rispetta il tracciato record, viene scritta la parola modificata, ma sfasata.
codice:
# include <iostream>
# include <windows.h> 
# include <string> 
# include <fstream>
# include <sstream>  //per la funzione stringstream
using namespace std;

string nome, cogn, numero, mail, modif;
string linea;
long pos;
int i,Num;

void acquis_scritt(ofstream &write);
void leggi_stampa();
int conta_righe();

int main()
{
  int scelta, Nriga, opz;
  char ok;
  cout << "RUBRICA telefonica\n"<<endl;

  while (scelta!=6)
  {     
  cout << "1) Inizia Rubrica "      << endl;
  cout << "2) Aggiungi Contatti "   << endl;
  cout << "3) Visualizza contatti " << endl;
  cout << "4) Elimina Rubrica "     << endl;
  cout << "5) Modifica contatti"    << endl;
  cout << "6) Esci" << endl;
  cin >> scelta; 

  if (scelta==1)
                {
                 ofstream write("Rubrica.txt",ios::out);
                 write << "N°";
                 write.seekp (5, ios_base::beg);
                 write << "NOME";
                 write.seekp (25, ios_base::beg);
                 write <<"COGNOME";
                 write.seekp (45, ios_base::beg);
                 write <<"NUMERO";
                 write.seekp (57, ios_base::beg); 
                 write <<"E-MAIL"<<endl;
                 Num=1;
                 acquis_scritt(write);
                 write.close();                    
                }
  if (scelta==2)
                {
                 ofstream write("Rubrica.txt",ios::app);
                 Num=conta_righe();
                 acquis_scritt(write);
                 write.close(); 
                } 
  if (scelta==3)
                {
                 leggi_stampa();
                }         
  if (scelta==4)
                {
                 cout << "Sei sicuro di voler eliminare la rubrica? (s/n)" << endl;
                 cin >> ok;
                 if (ok=='s' || ok=='S')
                                        {                    
                                        ofstream remove("Rubrica.txt");
                                        remove.close(); 
                                        cout << "Rubrica Eliminata!! "<<endl;  
                                        }                  
                } 
  if (scelta==5)
                {
                 leggi_stampa();                       
                 cout << "Inserisci il numero corrispondente alla personona" << endl;
                 cin >> Nriga;  
                 cout << "Inserisci '1' per il nome"    << endl;       
                 cout << "Inserisci '2' per il cognome" << endl;  
                 cout << "Inserisci '3' per il numero"  << endl;   
                 cout << "Inserisci '4' per l'e-mail"   << endl;  
                 cin >> opz;
                 cout << "Inserisci il campo modificato" << endl;
                 cin >> modif;
                 fstream r_w("Rubrica.txt",ios::in | ios::out);
                 if(r_w)
                        {
                        for(i=1;i<=Nriga;i++)                                                
                                            r_w >> linea;
                        }   
                 switch (opz) 
                 {
                  case 1:                      
                  r_w.seekp (5, ios_base::cur);
                  modif.resize(20);
                  r_w << modif;                                
                  break;
                  case 2:
                  r_w.seekp (25, ios_base::cur);  
                  modif.resize(20);
                  r_w << modif;   
                  break;
                  case 3:
                  r_w.seekp (45, ios_base::cur);
                  modif.resize(12);
                  r_w << modif;                      
                  break;
                  case 4:
                  r_w.seekp (57, ios_base::cur);
                  modif.resize(35);   
                  r_w << modif;  
                  break;          
                 } 
                  r_w.close();                            
                }
                 
  if (scelta!=3)
                system("CLS");                                                     
  } 
  cout << "Sei uscito dal programma." <<endl;                                     
  system("PAUSE");  
}
//------------------------------------------------------------------------------
void acquis_scritt(ofstream &write)
{
////////////////////////////  Scrive il contenuto di variabile 
    stringstream s;      //   intera su file di 5 byte
    string ss;          //          
    s << Num;          //
    ss = s.str();     //
    ss.resize(5);    //
    write <<ss;     //
/////////////////////    
 cout << "Inserisci  nome:"<<endl;
 cin >> nome;
 nome.resize(20);
 write << nome; 

 cout << "Inserisci  cognome:"<<endl; 
 cin >> cogn;
 cogn.resize(20);
 write << cogn; 

 cout << "Inserisci  numero:"<<endl; 
 cin >> numero;
 numero.resize(12);
 write << numero; 

 cout << "Inserisci  e-mail:"<<endl; 
 cin >> mail; 
 mail.resize(35);
 write << mail << endl;
}
//------------------------------------------------------------------------------
void leggi_stampa()
{
  system("CLS"); 
  int rig = conta_righe();
  ifstream read("Rubrica.txt");
  if(read)
          {
           for(i=1;i<=rig;i++)
                              {                                                 
                              read >> linea;
                              cout << linea <<endl;     
                              } 
          }  
  read.close();          
}
//------------------------------------------------------------------------------
// CONTA RIGHE
int conta_righe()
    {
    fstream file;
    string s;
    int contarighe=0;
    file.open("Rubrica.txt",ios::in);
    if(file)
            {
             while(!file.eof())
                               {
                               getline(file,s,'\n');
                               contarighe++;
                               }
            }
    return contarighe-1;
    }