Calcolo espressione in c

Ellihca
Ciao a tutti ;)
Il mio quesito è il seguente: è possibile calcolare il valore di un'espressione, passata in input da una stringa ?
Io ho provato così (con la funzione sprintf):

#include
#include
int main()
{
char* funzione;
char buf[1024];
float y;
gets(funzione);
sprintf(buf,funzione,3);
y=atoi(buf);
printf("%s",buf);
printf("%f",y);
}

In pratica se do come input la stringa:
%d*2
dovrebbe darmi 6...
però non funziona (mi mostra solo 3)

Secondo voi commetto qulche errore o non è possibile arrivare al risultato dell'espressione ?

Grazie e ciao !

Risposte
vict85
"Ellihca":
Ciao a tutti ;)
Il mio quesito è il seguente: è possibile calcolare il valore di un'espressione, passata in input da una stringa ?
Io ho provato così (con la funzione sprintf):

#include <stdio.h>
#include <stdlib.h>
int main()
{
char* funzione;
char buf[1024];
float y;
gets(funzione);
sprintf(buf,funzione,3);
y=atoi(buf);
printf("%s",buf);
printf("%f",y);
}


In pratica se do come input la stringa:
%d*2
dovrebbe darmi 6...
però non funziona (mi mostra solo 3)

Secondo voi commetto qulche errore o non è possibile arrivare al risultato dell'espressione ?

Grazie e ciao !


Prima di tutto non usare gets... usa fgets!

Seconda cosa il C non permette questo tipo di cose in automatico (ritengo anche giustamente). Personalmente non credo che esistano linguaggi compilati che te lo permettono.
Un interprete anche per cose così semplici necessita di un po' più fatica (non molta a dire il vero).

Devi leggere e dire al C come interpretare la stringa (usa un array non un puntatore). I puntatori e le stringhe non sono esattamente le stesse cose. Quando si crea un array una parte della memoria è allocata per quell'oggetto (e nulla dovrebbe usare quello spazio di memoria tranne lui se non deciso altrimenti), quando dichiari un puntatore no: hai solo un indirizzo di una porzione di memoria. Usare il tuo metodo è fortemente pericoloso e molto sconsigliato.

Ellihca
Grazie per la tua completa risposta;
Seguendo il tuo suggerimento dovrei caricare l'espressione in un array e gestire l'espressione studiando ogni singola cella dell'array, con controlli per vedere se si tratta di parentesi, numero, operatore e in base a questo fare le opportune operazioni fino ad arrivare al risultato dell'espressione, senza usare la funzione sprintf. Sono sulla giusta strada ?
Ciao !

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.