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:
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;
}
}
Per eseguirla faccio così:
codice:
int main(int argc, char *argv[])
{
float * a;
parsifica("1 2 + 3 * \n",a);
printf("%f\n");
system("pause");
}
il problema è che va in esecuzione, non prende gli input e crasha.
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.