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;
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;   
}
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.
Grazie!