Ciao, io devo fare la calcolatrice in notazione polacca inversa. Ho in un file una stringa per ogni riga del tipo 1.2 2.8 + 17 + 11 -.
Con le istruzioni void* buff=(char*)malloc(100); e fgets(buff, BUFSIZE, filei); leggo tutta la linea (compreso '\0') e la metto in buff: il prof m'ha detto di non usarla perchè c'è appunto il problema che prende anche \0 ma non ho trovato altro e voi?
Dopodichè volevo fare una cosa del genere solo che non converte bene in double la variabile val.
Il mio codice è
codice:// pone un valore in cima allo stack void push (stack *stack, int value) { element *p; p = malloc(sizeof(element)); p -> value = value; p -> next = stack -> top; stack -> top = p ; stack -> cnt++; } // recupera ed elimina il valore in cima allo stack double pop (stack *stack) { double value; element *p; value = stack -> top -> value; p = stack -> top; stack -> top = stack -> top -> next; stack -> cnt--; free(p); return value; } // restituisce il valore in cima allo stack double top (stack *stack) { return (stack -> top -> value); } void initialize (stack *stack) { stack -> cnt = 0; stack -> top = NULL; }codice:struct element { double value; struct element* next; }; typedef struct element element; typedef element* ptr_element; typedef struct { ptr_element top; int cnt; } stack;Ovviamente è incompleto e so come procedere, l'unico problema è leggere il file riga per riga e se trovo un numero faccio una cosa, se trovo un'operatore ne faccio un'altra, se finisce la riga calcolo il tutto e passo alla riga successiva.codice:#include <stdio.h> #include <stdlib.h> #include "stack.h" #include "stack.c" #define BUFSIZE 100 int main(){ FILE * filei, * fileo; filei=fopen ("in.txt","r"); fileo=fopen ("out.txt","w"); struct stack * nuovo = malloc(sizeof(stack)); double val, val1, val2; void* tmp=(char*)malloc(100); void* buff=(char*)malloc(100); while (!feof(filei)){ fgets(buff, BUFSIZE, filei); fprintf (fileo, "Codice operazione: %s\n ", buff); printf("valore della stringa buff %s\n", buff); tmp = strtok(buff, " "); while(tmp!=NULL){ printf("valore della stringa tmp %s\n", tmp); if(strcmp(tmp,"+")==0 ){ val1 = pop (nuovo); val2 = pop (nuovo); push (nuovo, val1+val2); printf("%.2f + %.2f = %.2f\n", val1, val2, top(nuovo)); } else if(strcmp(tmp,"-")==0){ val1 = pop (nuovo); val2 = pop (nuovo); push (nuovo, val1-val2); printf("%.2f - %.2f = %.2f\n", val1, val2, top(nuovo)); } else{ val = atof(tmp); push(nuovo, val); printf("top %.2f\n", top(nuovo)); } tmp = strtok(NULL, " "); } printf("il top alla fine vale %.2f\n",top(nuovo)); //fprintf (fileo, "risultato: %f\n", pop(nuovo)); } fclose(filei); fclose(fileo); printf("\n"); system("PAUSE"); return 0; }
Grazie!

Rispondi quotando