[C] Simulazione di un salvadanaio

di il
7 risposte

[C] Simulazione di un salvadanaio

Ciao a tutti!
Mi sono appena iscritto e sono già qui a darvi problemi, scusatemi!
Spero di riuscire ad essere d'aiuto in futuro!

Il testo dell'esercizio è il seguente:
Scrivere un programma che simuli un salvadanaio. L’utente pu`o inserire e prelevare soldi.
Visualizzare salvadanaio vuoto se non ci sono soldi nel salvadanaio. Il numero di operazioni
di inserimento e prelievo sono decise dall’utente.
E il codice che ho scritto è questo:
Allego anche su pastebin nel caso vogliate leggerlo in modo più "comodo"
#include <stdio.h>
#include <stdlib.h>

int main(){
int salvadanaio=50;
int prel, ins;
char a;
printf("Cosa vuoi fare?\n");
printf("P per prelevare, I per inserire, E per uscire\t");
do{
    a = getchar();
    if(a=='P' || a=='p'){
        printf("Quanto vuoi prelevare?\t");
        scanf("%d",&prel);
            if(prel>salvadanaio){
            printf("Non ci sono cosi' tanti soldi nel salvadanaio!\n");}
            else{
            salvadanaio = salvadanaio - prel;
            printf("Fatto! Adesso ci sono %d euro nel tuo salvadanaio",salvadanaio);}
            }
    else if(a=='I' || a=='i'){
        printf("Quanto vuoi inserire nel portafogli?\t");
        scanf("%d",&ins);
        salvadanaio += ins;
        printf("Adesso ci sono %d euro nel salvadanaio!\t",salvadanaio);
    }
  }while(a != 'e' || a != 'E');
 return 0;

}
Il mio problema è: avvio il programma, scelgo cosa fare, lo fa. Ma come potete notare avviandolo, eseguita una delle operazioni, non "sale" di nuovo all'inizio del ciclo! Cos'ho sbagliato?

7 Risposte

  • Re: [C] Simulazione di un salvadanaio

    while(a != 'e' || a != 'E');
    sei sicuro di questo test?
  • Re: [C] Simulazione di un salvadanaio

    candaluar ha scritto:


    while(a != 'e' || a != 'E');
    sei sicuro di questo test?
    Dici che può essere proprio questo l'errore? Non dovrebbe uscire una volta inserito E?
    E' relativo al suo non tornare in cima?


    EDIT: hai ragione tu. Ho appena provato a inserire la E ma il programma si impalla.
    Però nonostante tutto ho il dubbio su cosa inserire lì.

    Altro Edit: Ok, l'ho riscritto così e spero vada bene:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    int salvadanaio=50;
    int prel, ins, ciclo=1;
    char a;
    printf("Cosa vuoi fare?\n");
    printf("P per prelevare, I per inserire, E per uscire\t");
    do{
        a = getchar();
        if(a=='P' || a=='p'){
            printf("Quanto vuoi prelevare?\t");
            scanf("%d",&prel);
                if(prel>salvadanaio){
                printf("Non ci sono cosi' tanti soldi nel salvadanaio!\n");}
                else{
                salvadanaio = salvadanaio - prel;
                printf("Fatto! Adesso ci sono %d euro nel tuo salvadanaio",salvadanaio);}
                }
        else if(a=='I' || a=='i'){
            printf("Quanto vuoi inserire nel portafogli?\t");
            scanf("%d",&ins);
            salvadanaio += ins;
            printf("Adesso ci sono %d euro nel salvadanaio!\t",salvadanaio);
        }
        else if(a=='E' || a=='e'){
            printf("Hai scelto di chiudere, ciao!\n");
            return 0;
        }
      }while(ciclo=1);
    
     return 0;
    
    }
    Ma, anche se stavolta riesce ad uscire dal programma, effettuando le altre operazioni non torna in cima al ciclo.
  • Re: [C] Simulazione di un salvadanaio

    candaluar ha scritto:


    while(a != 'e' || a != 'E');
    sei sicuro di questo test?
    Ok, ho risolto

    http://pastebin.com/CjZFfhL

    Ti ringrazio per avermi aiutato, gentilissimo!

  • Re: [C] Simulazione di un salvadanaio

    while(ciclo=1)
    Attento nell'ultimo codice postato... sei proprio sicuro? Controlla bene il confronto (se è un confronto )
  • Re: [C] Simulazione di un salvadanaio

    candaluar ha scritto:


    while(ciclo=1)
    Attento nell'ultimo codice postato... sei proprio sicuro? Controlla bene il confronto (se è un confronto )
    L'ho scritto apposta così, nel senso che il programma gira fin quando non si inserisce E, cosa che inserito come if all'interno del ciclo stesso.
    Posso farlo anche in altro modo?
  • Re: [C] Simulazione di un salvadanaio

    Puoi fare un ciclo infinito e uscire dal ciclo con break o return
    while(1)
    oppure puoi usare un segnalino che setti a 0 se vuoi uscire (al posto di fare break o return)
    while(ciclo == 1)
    oppure
    while(ciclo)
    ma fare
    while(ciclo = 1)
    rischia di portarti a fare degli errori...
  • Re: [C] Simulazione di un salvadanaio

    candaluar ha scritto:


    Puoi fare un ciclo infinito e uscire dal ciclo con break o return
    while(1)
    oppure puoi usare un segnalino che setti a 0 se vuoi uscire (al posto di fare break o return)
    while(ciclo == 1)
    oppure
    while(ciclo)
    ma fare
    while(ciclo = 1)
    rischia di portarti a fare degli errori...
    Tu mi hai risposto e io guardando il codice mi sono reso conto della scemenza!
    L'avevo scritto come assegnazione!

    Che dirti, se non grazie ancora per il disturbo!
Devi accedere o registrarti per scrivere nel forum
7 risposte