DOMANDA Aiuto Risoluzione Problemi Programmi C++

Stato
Discussione chiusa ad ulteriori risposte.

N3w_W0rld

Nuovo Utente
Ciao a tutti!
Spero che qualche anima pia mi aiuti ^^ Da un paio di settimane seguo un corso di C++, ho creato diversi progetti funzionanti ma ce ne sono 2 che continuano a tormentarmi.
1°: E' un programma che simula le operazioni effettuabili su un terminale bancomat, una volta inseriti i dati utente e saldo iniziale si possono "eseguire" le varie operazioni, per fare questo ho usato "switch" ed in questo switch ne ho inserito un altro per poter accedere alla procedura "riepilogo", una volta che sono nella sezione riepilogo se, ad esempio, esegue "saldo" mi dice l'effettivo saldo corrente ma una volta dato l'output si blocca e non torna al riepilogo. Spero di essere stato chiaro, allego il codice:
C:
int main(int argc, char** argv) {
 string nomeCliente;
 double saldo,sommaDenaro,numVersamenti=0,sommaTotVersato=0,numPrelievi=0,sommaTotPrelievi=0,numAssegni=0,sommaTotAssegni=0,money;
 char tipoOperazione;
 cout<<"\n\nInserire nome cliente";
 getline(cin,nomeCliente);
 cout<<"\n\nInserisci il tuo saldo iniziale";
 cin>>saldo;
 
 do{ system("cls");
    cout<<"\n\nSalve, cosa ti serve " <<nomeCliente;  //compare il nome inserito in precedenza
    cout<<"\n\nPrelievo--->P";
    cout<<"\n\nVersamento--->V";
    cout<<"\n\nAssegno--->A";
    cout<<"\n\nRiepilogo--->R";
    cout<<"\n\nFine--->F";
    cin>>tipoOperazione;
 switch(tipoOperazione){
 
  case 'P':  cout<<"\n\nQuanto vuoi prelevare?";
             cin>>money;
            if (money<=saldo){
            sommaDenaro=saldo-money;
        
            numPrelievi++;
            sommaTotPrelievi+=money;
            saldo-=money;
     }else{
     cout<<"\n\nOperazione non possibile";
         }break;
      
  case 'V': cout<<"\n\nQuanto vuoi versare?";
            cin>>money;
        
            sommaTotVersato+=money;
            numVersamenti++;
            saldo+=money;
            break;
        
     case 'A': cout<<"\n\nQuanto vuoi depositare?";
               cin>>money;
               sommaTotAssegni+=money;
            numAssegni++;
            saldo+=money;
            break;
        [QUA INIZIA A NON FUNZIONARE]
     case 'R': cout<<"\n\nRiepilogo del tuo conto corrente, cosa vuoi sapere?";
                  cout<<"\n\nSaldo--->S";
      cout<<"\n\nInfo prelievi--->B";
      cout<<"\n\nInfo versamenti--->C";
      cout<<"\n\nInfo assegni--->D";
      cin>>tipoOperazione;
       switch(tipoOperazione){
    
       case 'S': cout<<"\n\nIl tuo saldo attuale e' di: ";
                 cout<<saldo;
                  break;
              
        case 'B': cout<<"Riepilogo prelievi: ";
                  cout<<"\n numero prelievi effettuati:" <<numPrelievi;
                  cout<<"\n Totale somma prelevata: "<< sommaTotPrelievi;
                  break;
    
        case'C': cout<<"Riepilogo versamenti: ";
                 cout<<"\n Numero versamenti effettuati: " <<numVersamenti;
                 cout<<"\n Totale somma versata: " << sommaTotVersato;
                 break;
              
        case'D': cout<<"Riepilogo assegni: ";
                 cout<<"\n Numero asseggni effettuati:" <<numAssegni;
                 cout<<"\n Totale somma versata: " <<sommaTotAssegni;
                 break;
                  } while (tipoOperazione != 'D');
 
  case 'F' : cout<<"\n\nSessione conclusa, buona giornata " <<nomeCliente;              
                system("EXIT");
          
 }
 }while (tipoOperazione != 'F');
    system("PAUSE");
 return 0;
}
2°: Programma per registrare degli atleti schedandoli con nome,cognome ed età.
Usando il "void Acquisisci" creato per registrare gli atleti, una volta avviato il programma quando appare sullo schermo"Nome atleta: \n Eta' " posso inserire solamente degli iteri per l'età e non posso inserire il nome dell'atleta.
Allego anche qua la riga di codice in questione:
C:
void Acquisisci(string vett1[],int vett2[],int & lung){
cout<<"\n Inserisci numero atleti:  ";
cin>> lung;
for(int i=0;i<lung;i++){
 cout<<"\n\n Nome atleta:  ";
 getline(cin,vett1[I]); // acqusisco nomi
 cout<<"\n\n Eta' atleta: ";
    cin>>vett2[I];   //acquisisco età
}
}
 
Ultima modifica da un moderatore:

rodhellas

Utente Attivo
1,470
395
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
Prova a cambiare il soggetto del secondo switch. Chiami uno switch dentro un'altro switch usando come oggetto 'tipoOperazione'. Penso sia quello il problema. Comunque non è bello uno switch in un altro switch.

Per il secondo, prova con cin.ignore() dopo il primo cout del for, dovrebbe liberarti dal buffer il \n
 
  • Mi piace
Reactions: N3w_W0rld

rodhellas

Utente Attivo
1,470
395
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
Potresti usare il solito if-else e metterci uno switch dentro volendo. Rende il tutto più leggibile. Ti consiglierei anche di creare delle funzioni per semplificare il main (per esempio, nel secondo switch dei riepiloghi, potresti creare una sola funzione stampaRiepiloghi(char decisione, double versamenti, double somma) che ti stampi le varie informazioni al variare del char decisione (e ovviamente ai due double)).
 
  • Mi piace
Reactions: N3w_W0rld

rodhellas

Utente Attivo
1,470
395
Hardware Utente
CPU
Intel i5 3470
Scheda Madre
AsRock H77 pro4/mvp
Hard Disk
120GB SSD + 1TB HD
RAM
12GB Corsair XMS3 1333mhz
Scheda Video
Gigabyte GTX 960 OC
Scheda Audio
Integrata
Monitor
SyncMaster 223BW
Alimentatore
Antec HCG-520M
Case
Thermaltake Commander Ms-i Snow Edition
Sistema Operativo
Windows 10 64bit
Mi sono accorto ora: hai fatto due cicli do-while specificando però solo un do unico (o comunque presumo fosse quello il tuo intento).
Quindi probabilmente i due switch funzionano lo stesso con la stessa variabile, ma in while (tipoOperazione != 'D') parte un ciclo infinito (con D non dovrebbe darti problemi)
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando