Salve,
sto sviluppando un calcolatrice polacca inversa che prende da un file .txt valori:
es:
codice:
621.4 2 + 6.12 + 12 -
19 2 + 9 + 15 -
14 488 + 6 + 10 -
quindi io ho pensato di svolgere così il mio while
codice:
void* tmp=(char*)malloc(100);
void* buff=(char*)malloc(100);
while (!feof(filei)){
fgets(buff, BUFSIZE, filei);
fprintf (fileo, "\nCodice operazione: %s ", buff);
printf("valore della stringa buff %s\n", buff);
tmp = (void *) 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, val2+val1);
printf("%.2f + %.2f = %.2f\n", val2, val1, top(nuovo));
}
else if(strcmp(tmp,"-")==0){
val1 = pop(nuovo);
val2 = pop(nuovo);
push (nuovo, val2-val1);
printf("%.2f - %.2f = %.2f\n", val2, val1, top(nuovo));
}
else if(strcmp(tmp,"*")==0){
val1 = pop(nuovo);
val2 = pop(nuovo);
push (nuovo, val2*val1);
printf("%.2f * %.2f = %.2f\n", val2, val1, top(nuovo));
}
else if(strcmp(tmp,"/")==0){
val1 = pop(nuovo);
val2 = pop(nuovo);
push (nuovo, val2/val1);
printf("%.2f / %.2f = %.2f\n", val2, val1, top(nuovo));
}
else {
val = atof(tmp);
push(nuovo, val);
printf("top %.2f\n", top(nuovo));
}
tmp = (void *) strtok(NULL, " ");
}
printf("il top alla fine vale %.2f\n",top(nuovo));
fprintf (fileo, "risultato: %.2f\n", pop(nuovo));
}
funziona o quasi! fgets prende una singola riga del mio file .txt poi strtok prende in esame correttamente i valori solo che il problema è che quando finisce la riga non mi restituisce il risultato ma 0, cioè il mio problema è appunto quando finisce una riga e deve passare alla successiva invece all'ultima riga del mio file restituisce il risultato.
es della stampa con le prime due righe senza risultato e l'ultima con il risultato:
codice:
Codice operazione: 621.4 2 + 6.12 + 12 -
risultato: 0.00
Codice operazione: 19 2 + 9 + 15 -
risultato: 0.00
Codice operazione: 30 5 - 7 * risultato: 175.00