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!