DOMANDA Aiuto Risoluzione Problemi Programmi C++

Stato
Discussione chiusa ad ulteriori risposte.

N3w_W0rld

Nuovo Utente
5
1
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 Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
Reazioni: N3w_W0rld

N3w_W0rld

Nuovo Utente
5
1
Ciao! Grazie mille per la risposta, appena ho un attimo di tempo provo a sistemare tutto.
Lo switch dentro lo switch con cosa mi consiglieresti di sostituirlo?
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
Reazioni: N3w_W0rld

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
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
Discord Ufficiale Entra ora!