Salve,
sto sviluppando un calcolatrice polacca inversa che prende da un file .txt valori:
es:quindi io ho pensato di svolgere così il mio whilecodice:621.4 2 + 6.12 + 12 - 19 2 + 9 + 15 - 14 488 + 6 + 10 -
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.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)); }
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

Rispondi quotando