Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87

    [C] Calcolatrice tramite switch

    Ciao a tutti,stavo provando a realizzare un programma che fungesse da calcolatrice molto elementare,niente elevamenti a potenza per ora.Ho provato usando switch come segue:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        float a,b,c;
        int i;
        char y;
        char repeat='y';
        char o='?';
        while(repeat == 'y')
        {
                        while(o!='+' && o!='-' && o!='/' && o!='*')
                        {
                                     printf("\n Impostare operazione come segue--> operando1 operatore operando2\n");
                                     scanf("%f %c %f",&a,&o,&b);
                        }                        
                        switch(o)
                        {
                                 case '+':
                                      {
                                          c=a+b;
                                          printf("%f",c);
                                          break;
                                      }
                                 case '-':
                                      {
                                          c=a-b;
                                          printf("%f",c);
                                          break;
                                      }
                                 case '/':
                                      {
                                          c=a/b;
                                          printf("%f",c);
                                          break;
                                      }
                                 case '*':
                                      {
                                          c=a*b;
                                          printf("%f",c);
                                          break;
                                      } 
                        }
                        printf("\n altre operazioni da eseguire? -->(y/n)<-- \n");
                        scanf("%c",&repeat);
                        o='?';
        }
        system("pause");
        return 0;
    }
    il problema è che svolta la prima operazione lui si limita a stampare il risultato e "altre operazioni da eseguire?" senza aspettare che inserisca nulla fa terminare il programma.Mi viene il dubbio che il problema parta dallo switch,o meglio dal break nello switch,inizialmente pensavo che uscisse direttamente dal primo while,in tal caso non avrei chiaro perchè mi stampa comunque quell'ultimo printf che è comunque all'interno del while....
    Grazie mille.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Dovrebbe essere l'ultimo scanf cn repeat, forse nn ce la y
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dopo ogni scanf inserisci una linea

    while(getchar()!='\n');

    per svuotare il buffer
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Grazie, altrimenti mi era stato detto di usare %*%c nelle scanf tipo scanf("%f%*c",&pippo), scusa l'ignoranza ma perché parli di svuotare il buffer? Non ho idea di cosa accadrebbe e perché xD

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    ah cmq mettendo quel %*c funziona è ma non capisco cosa faccia ne tanto meno perchè si debba svuotare il buffer :|

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    A quanto ho capito il %*c serve semplicemente a dire di ignorare l'ultimo carattere inserito,immagino nel caso in cui come risultato ci ritorni un numero e un carattere,quello che non capisco è perchè ciò permetta al programma di funzionare.....

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché l'ultimo carattere ignorato è il '\n' (il ritorno a capo), che è quello che fa la while che ti ho suggerito.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    cioè quindi pulisco il buffer eliminando quello che c'era in memoria fino a un attimo fa di modo che possa riconoscere il carattere che metto alla fine?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... pulisco il buffer da tutti i caratteri non utilizzati dall'ultima scanf e che potrebbero essere utilizzati (in maniera inopportuna) dagli input successivi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.