Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Calcolatrice in C - problemi
Forum - C/C++ - Calcolatrice in C - problemi

Avatar
G82T (Founder Member)
Expert


Messaggi: 225
Iscritto: 14/08/2005

Segnala al moderatore
Postato alle 18:51
Domenica, 29/04/2007
Non riesco a capire perchè la calcolatrice che ho fatto non funziona, non capisco il perchè
il risultato rimane 0.0000.

Questo è il codice sorgente (non è un gran che ma è tanto per fare qualcosa)

#include<stdio.h>
#include<conio.h>
#include<math.h>

float a,b,i; // "a=primo numero" "b=secondo numero" "i=contatore"
double r;   //  "r=risultato"
char o;    //   "o=operatore"

double operatore(char,float,float); //funzione riconoscimento operatore (+ - * / x X)

main() {
    
    printf("\nEdit by gLuK90");
    printf("\ng82t.altervista.org\n");

    printf("\n====================");
    printf("\n=======CalcX========");
    printf("\n====================");

    printf("\nInserisci X per interrompere il ciclo.\n");
    a=0; b=0; r=0; o=0; i=1;
    
    //la i viene inizializzata a 1 per farla entrare nel primo if dento il do-while
   // la "i=0" è il segnale d'uscita dal ciclo che segue al riconoscimento in
  //  a,b,o di x o X

   do {
    
    // if che opera con "a" e "b" assegnando il risultato ad "r"
   //  all'uscita dell'if si opera solo fra "b" e "r"


    if(i=1) {
       printf("\nInserisci numero: "); scanf("%d",&a);
       fflush(stdin);

        //svuota la stdin dai caratteri in eccesso, evitando di considerare caratteri
       //precedenti come appena immessi.

       printf("\nInserisci operatore: "); scanf("%c",&o);
      
       printf("\nInserisci numero: "); scanf("%d",&b);

       //funzione che controlla l'operatore se è + - / * e assegna il risultato ad r

       r=operatore(o,a,b);


            
      
       system("cls");
      
       printf("\n                ris=%lf",r);
     i=2;
    } // chiude "if(i=1)"

PM Quote
Avatar
G82T (Founder Member)
Expert


Messaggi: 225
Iscritto: 14/08/2005

Segnala al moderatore
Postato alle 19:08
Domenica, 29/04/2007
fflush(stdin);
       printf("\nInserisci operatore: ");scanf("%c",&o);
       printf("\nInserisci numero: "); scanf("%d",&b);

       r=operatore(o,r,b);
      
       printf("\n                ris=%lf",r);
       getch();    
   } while(i!=0);    
        
}

double operatore(char op, float x, float y) {
double rs;
      if(op=='+') { rs=x+y;}  if(op=='-') { rs=x-y;}
      if(op=='*') { rs=x*y;}  if(op=='/') { rs=x/y;}

      //controlla se a,b,o non siano x ovvero il segnale d'uscita
  
   if((a=='X')||(b=='X')||(o=='X')) { i=0; }
   if((a=='x')||(b=='x')||(o=='x')) { i=0; }
    
return rs;
}


Mi sareste d'aiuto se mi aiutaste magari con qualche consiglio.
Sto pensando ad esempio di utilizare lo scanset per evitare di prendere come operatore
cifre e lettere non accettabili, in modo da non mandare in palle il programma con risultati
casuali.

Ultima modifica effettuata da G82T il 29/04/2007 alle 19:09
PM Quote
Avatar
cH!cus (Ex-Member)
Pro


Messaggi: 149
Iscritto: 03/04/2006

Segnala al moderatore
Postato alle 21:11
Lunedì, 30/04/2007
A prima vista mi sembra strutturato non molto bene il programma, cmq dopo vedo di darci un'occhiata. Se  intanto tu avessi risolto ti volevo dire che per evitare l'inserimento di caratteri strani potresti usare le funzioni di ctype.h, quali isalnum(), isalpha(), isdigit() ecc...

Cmq guarda, dai un'occhiata a comè strutturata la calcolatrice di skirk:
http://www.pierotofy.it/pages/sorgenti/browse/15788/1798/

Potresti prenderne spunto, infondo a questo livello il C e il C++ sono simili.

PM Quote