Salve a tutti! stavo cercando di implementare una calcolatrice calcolatrice RPN basata su stack per un progetto scolastico, ma sono un po' bloccato. sono molto alle prime armi in c come potete vedere dal codice. Questo è quanto ho scritto:
Per eseguirla faccio così:codice:int parsifica(char * stringa,float * risultato){ if(stringa!=NULL){ char * s; char * buffer=malloc(STRLEN*sizeof(char)); float (*puntfunz) (float a,float b); dd_stack * stack=new_stack(); if(DEBUG)printf("stack creato e var inizializzate\n"); for(stringa;*stringa!='\n'||*stringa!='\0';stringa++){ if(DEBUG)printf("trovato %c\n",*stringa); s=stringa; if(*stringa=='+'||*stringa=='-'||*stringa=='*'||*stringa=='/'){ if(DEBUG)printf("trovato operatore: %c\n",*stringa); switch (*stringa){ case '+': puntfunz = somma; break; case '-': puntfunz = sottrai; break; case '*': puntfunz = moltiplica; break; case '/': puntfunz = dividi; break; } push(stack,puntfunz(pop(stack),pop(stack))); } if(*stringa == ' '){ if(DEBUG)printf("trovato 1 spazio numero in buffer %s\n",buffer); push(stack,(float)atof(buffer)); if(DEBUG)printf("effettuata push di %f\n",(float)atof(buffer)); free(buffer); buffer=malloc(STRLEN*sizeof(char)); } else{ if(DEBUG)printf("inserisco in buffer\n"); *buffer=*stringa; if(DEBUG)printf("inserito in buffer\n"); buffer++; if(DEBUG)printf("puntatore a buffer aumentato\n"); } } *risultato=pop(stack); return 0; } else{ fprintf(stderr,"errore nella stringa di input\n"); return 1; } }
il problema è che va in esecuzione, non prende gli input e crasha.codice:int main(int argc, char *argv[]) { float * a; parsifica("1 2 + 3 * \n",a); printf("%f\n"); system("pause"); }
Per chi fosse così gentile da voler vedere tutto il codice lo trovate qui.
mi dareste una mano a venirne a capo che sono prossimo alla follia? vi ringrazio sentitamente.

Rispondi quotando