PDA

Visualizza la versione completa : [C]problema con strtok


Uccio87
28-11-2011, 11:47
Salve,
sto sviluppando un calcolatrice polacca inversa che prende da un file .txt valori:
es:
621.4 2 + 6.12 + 12 -
19 2 + 9 + 15 -
14 488 + 6 + 10 -
quindi io ho pensato di svolgere così il mio while

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 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

oregon
29-11-2011, 14:45
Vedi

http://forum.masterdrive.it/c-c-21/c-problema-strtok-60862/#post241149

Loading