Newsgroup: it.comp.lang.c++
Titolo: aiuto collegamento fra 2 record

Ciao ragazzi,ho collegato 2 record generati dinamicamente,ma quando eseguo
il programma nn mi fa inserire il nome del secondo abbonato e mi fa inserire
direttamente l'indirizzo del secondo abbonato.Ecco il listato:
PS aggiungo che se nel listato cancello l'istruzione cin>>p1->telefono;
così invece mi fa inserire il nome del secondo abbonato;
AIUTO,GRAZIE.
   struct abbonato;
    typedef abbonato *pabb;
   typedef struct abbonato{
           char *nominativo;
           char indirizzo[100];
           int telefono;
           pabb succ;
                  };
int main()
{
    typedef abbonato *pabb;
      pabb p1,p2;
   p1=new abbonato;
   p2=new abbonato;
  p1->succ=p2;
  p2->succ=0;
  //primo abbonato
  cout<<"\n inserisci il nome:\n";
  char nome[100];
  cin.getline(nome,100);
  p1->nominativo=new char[strlen(nome)+1];
  strcpy(p1->nominativo,nome);
  cout<<"\n inserisci l'indirizzo:\n";
  cin.getline(p1->indirizzo,100);
  cout<<"\n inserisci il numero di telefono:\n";
  cin>>p1->telefono;
   //secondo abbonato
  cout<<"\n inserisci il nome:\n";
  char nom[100];
  cin.getline(nom,100);
  p1->succ->nominativo=new char[strlen(nom)+1];
    strcpy(p1->succ->nominativo,nom);
  cout<<"\n inserisci l'indirizzo:\n";
  cin.getline(p1->succ->indirizzo,100);
  cout<<"\n inserisci il numero di telefono:\n";
  cin>>p1->succ->telefono;
  cout<<p1->nominativo<<p1->indirizzo<<p1->telefono<<"\n";
  cout<<p1->succ->nominativo<<p1->succ->indirizzo<<p1->succ->telefono;
  delete [] p1->nominativo;
  delete [] p1->indirizzo;
  delete p1;
  delete [] p1->succ->nominativo;
  delete [] p1->succ->indirizzo;
  delete p1->succ;
  delete p2;
  system("PAUSE");
  return 0;
}

 AIUTO,GRAZIE.
Questa è la mia soluzione, ho anche cercato di "correggere" qualcosina qui e 
là, nella mia ignoranza. A proposito, stai seguendo il corso di 
Programmazione I?
Codice Sorgente RecordCollegati.cpp:
#include <iostream>
#include <cstdlib>
using namespace std;
struct abbonato;
typedef abbonato* pabb;
struct abbonato {
       char* nominativo;
       char indirizzo[100]; // Meglio usare il char pointer, non ti pare?
       int telefono;
       pabb succ;
       };
int main() {
    system("cls"); // Serve per "pulire" lo schermo
    //typedef abbonato *pabb; // Hai già utilizzato il typedef fuori dal 
main!
    /*
    pabb p1,p2;
    p1=new abbonato;
    p2=new abbonato;
    p1->succ=p2;
    p2->succ=0;
    Io preferirei allocare i record in questa maniera:
    */
    pabb p1;
    p1 = new abbonato;
    p1->succ = new abbonato;
    p1->succ->succ = 0; // In questo modo abbiamo un unico puntatore!
    cout << "Primo abbonato\n\n";
    cout<<"Inserisci il nome: ";
    char nome[100];
    cin.getline(nome,100);
    p1->nominativo=new char[strlen(nome)+1];
    strcpy(p1->nominativo,nome);
    cout<<"Inserisci l'indirizzo: ";
    cin.getline(p1->indirizzo,100);
    cout<<"Inserisci il numero di telefono: ";
    cin>>p1->telefono;
    cin.ignore(); // Svuota il buffer del carattere di fine riga /0. In 
questo
                  // modo eviti il tuo problema.
    cout << "\nSecondo abbonato\n\n";
    cout<<"Inserisci il nome: ";
    char nom[100];
    cin.getline(nom,100);
    p1->succ->nominativo=new char[strlen(nom)+1];
    strcpy(p1->succ->nominativo,nom);
    cout<<"Inserisci l'indirizzo: ";
    cin.getline(p1->succ->indirizzo,100);
    cout<<"Inserisci il numero di telefono: ";
    cin>>p1->succ->telefono;
    cin.ignore();
    cout << "\n\nOutput dei dati inseriti\n\n";
    cout<< p1->nominativo << "\n" << p1->indirizzo << "\n" << p1->telefono 
<<"\n\n";
    cout<< p1->succ->nominativo << "\n" << p1->succ->indirizzo << "\n" << 
p1->succ->telefono << "\n";
    delete [] p1->nominativo;
    //delete [] p1->indirizzo; // Non è un char pointer!
    //delete p1; // Attento! se ti servi di p1 per cancellare il secondo 
record
                 // non puoi eliminarlo ora! :p
    delete [] p1->succ->nominativo;
    //delete [] p1->succ->indirizzo; // Non è un char pointer!
    delete p1->succ;
    delete p1;
    //delete p2; // Hai già cancellato p2 con il delete p1->succ! Tralaltro,
                 // scopo dei record collegati è quello di utilizzare un 
solo
                 // puntatore per accedere a varie strutture, quindi che 
senso
                 // avrebbe tirare in ballo p2, se prima te ne sei disfatto?
    system("pause");
    return 0;
}


ti ringrazio dell'aiuto e soprattutto anche dei chiarimenti,mi sn stati
davvero utili.Sto seguendo il corso di Programmazione 1 essendo iscritto ad
Ingegneria delle Telecomunicazioni a Napoli,anke tu hai fatto quest'esame?Io
sn proprio a livello zero col c++,beh cerco di fare del mio meglio.

 mio meglio.
Ci avrei scommesso, mi sto preparando anche io per quell'esame! Sono 
iscritto a Ing. Elettronica alla Federico II!