Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problemi con il ciclo while
Forum - C/C++ - problemi con il ciclo while

Avatar
paco87 (Normal User)
Newbie


Messaggi: 7
Iscritto: 02/11/2011

Segnala al moderatore
Postato alle 9:21
Lunedì, 14/11/2011
Ciao ragazzi, sono di nuovo io, stavolta ho problemi con un ciclo while. Il corpo della funzione seguente funziona(scusate il giro di parole). Il problema è che quando esce dal while, cioè digitando 0, ritorna all' inizio della stessa funzione(cioè ritorna a cancella), non alla funzione che l' ha chiamata... cosa succede?? (Ripeto: il corpo sta bene, scusate se è un po lungo, l'ho postato per maggiore chiarezza, non funziona solo il ciclo)

Codice sorgente - presumibilmente C/C++

  1. void Cancella()
  2. {
  3.    int cod, pos;
  4.    ifstream fin("rubrica.dat", ios::in);
  5.    fin.seekg(-(sizeof amico),ios::end);            
  6.    fin.read((char*)&amico,sizeof amico);//per amico.cod
  7.    fin.close();
  8.    cout<<"\n\n\tInserisci il campo codice della persona da cancellare: ";
  9.    cout<<"\n\tPer uscire digita 0    ";
  10.    cin>>cod;
  11.     while(cin.fail())
  12.       {
  13.         cout<<"\n\tValore non valido\n\tReinserisci il campo codice: ";
  14.         cin.sync();
  15.         cin>>cod;
  16.       }
  17.     while(cod<0 || cod>(amico.card))
  18.       {
  19.         cout<<"\n\tScelta non valida!\n\tReinserisci il codice: ";
  20.         cin>>cod;
  21.       }
  22.   while(cod!=0)// do
  23.     {
  24.       fstream file("rubrica.dat", ios::in| ios::out|ios::binary);
  25.       if(!file)
  26.        {
  27.          cout<<"\n\tErrore nell' apertura del file\n";
  28.          cout<<"\tPremi Invio per continuare";
  29.          cin.sync();
  30.          cin.get();
  31.          exit(1);
  32.        }
  33.       file.clear();
  34.       pos=(cod-1)*sizeof amico;
  35.       file.seekg(pos);
  36.       file.read((char *) &amico, sizeof amico);
  37.       system("cls");
  38.       cout<<"\n\n\tIn memoria ci sono questi dati:\n\n";
  39.       cout<<setw(11)<<setfill(' ')<<setiosflags(ios::left);
  40.        cout<<" Matricola";
  41.        cout<<setw(25)<<setfill(' ')<<setiosflags(ios::left);
  42.        cout<<"Cognome";
  43.        cout<<setw(25)<<setfill(' ')<<setiosflags(ios::left);
  44.        cout<<"Nome";
  45.        cout<<setw(11)<<setfill(' ')<<setiosflags(ios::left);
  46.        cout<<"Cellulare";  
  47.        cout<<setw(11)<<setfill(' ')<<setiosflags(ios::left);
  48.        cout<<"Codice"<<endl<<endl;
  49.        cout<<" ";
  50.        cout<<setw(11)<<setfill(' ')<<setiosflags(ios::left);
  51.        cout<<amico.ID;
  52.        cout<<setw(25)<<setfill(' ')<<setiosflags(ios::left);
  53.        cout<<amico.cognome;
  54.        cout<<setw(25)<<setfill(' ')<<setiosflags(ios::left);
  55.        cout<<amico.nome;
  56.        cout<<setw(11)<<setfill(' ')<<setiosflags(ios::left);
  57.        cout<<amico.cell;    
  58.        cout<<setw(11)<<setfill(' ')<<setiosflags(ios::left);
  59.        cout<<amico.card;
  60.        cout<<"\n\n\tCancellazione dall' archivio ";  
  61.       cout<<".";_sleep(300);cout<<".";_sleep(300);cout<<".";_sleep(300);  
  62.       file.seekg(pos);   //si riposiziona all' inizio del record
  63.       if(file.fail())
  64.        {
  65.          cout<<"\n\tErrore di posizionamento \n";
  66.          cout<<"\tPremi Invio per continuare";
  67.          cin.sync();
  68.          cin.get();
  69.          exit(5);
  70.        }
  71.        strcpy(amico.cognome, "*");
  72.       //scrive il record
  73.        file.write((char *) &amico, sizeof amico);
  74.        cout<<"\n\n\tElemento cancellato!\n";
  75.        file.close();
  76.        cout<<"\n\tInserisci il campo codice del dipendente da cancellare: ";
  77.        cout<<"\n\tPer uscire digita 0    ";
  78.        cin>>cod;      
  79.      }
  80.   return;
  81. }


Ultima modifica effettuata da Il Totem il 15/11/2011 alle 15:20
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 15:25
Martedì, 15/11/2011
Manca il codice che richiama Cancella.

P.S.: i while divisi non vanno bene. E' possibile che valga cin.fail() nel secondo while oppure si può inserire un valore minore di zero nel terzo. Le condizioni di uscita devono stare tutte assieme, congiunte da un or.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote