Oppure

Loading
29/04/07 16:51
G82T
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)"
aaa
29/04/07 17:08
G82T
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 29/04/07 17:09
aaa
30/04/07 19:11
cH!cus
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:
pierotofy.it/pages/sorgenti/browse/15788/1798/

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