Sto studiando programazione 2, programmando in C, scrivendo un programma per gestire la calcolatrice con notazione polacca, ho utilizzato lo stack(pila), ma ho dei problemi nella lettura dei caratteri, perchè il printf mi stampa dei valori assurdi.
ES.
se do in ingrasso 1 2 3 * +=
la funzione dovrebbe darmi 7, perchè fa (3*2) +1 = 7
potreste darmi consigli????....
vi posto il codice
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #define STACK_SIZE 100 char contents[STACK_SIZE]; int top=0; typedef int Bool; void stack_overflow() { printf("Espressione troppo complessa!\n"); exit(EXIT_FAILURE); } void stack_underflow() { printf("Non ci sono abbastanza operandi!\n"); exit(EXIT_FAILURE); } void make_empty(void) { top=0; } Bool is_empty(void) { return top==0; } Bool is_full(void) { return top==STACK_SIZE; } void push(int i) { if(is_full()) stack_overflow(); else contents[top++]=i; } double pop(void) { if(is_empty()) stack_underflow(); else return contents[--top]; } int main(void) { char ch; double risult=0.0; printf("inserisci un espressione RPN: "); do { scanf("%c", &ch); if(ch<='9' && ch>='0') push(ch); else if(ch!=' ' && ch!='\n') { switch(ch) { case '*': risult=pop(); risult*=pop(); push(risult); break; case '+': risult=pop(); risult+=pop(); push(risult); break; case '-': risult=pop(); risult-=pop(); push(risult); break; case '/': risult=pop(); risult/=pop(); push(risult); break; case '=': printf("Il risultato e': %f", pop()); /*exit(EXIT_SUCCESS);*/ break; default: printf("Operando non valido"); /* exit(EXIT_FAILURE);*/ break; } } } while(ch!='\n'); system("PAUSE"); return 0; }