PDA

Visualizza la versione completa : [LEX] Stampa errata di valori inseriti dall'utente


ramy89
09-02-2012, 19:38
Ho questo file in formato lex:





digit [0-9]
fract {digit}.{digit}
character [a-zA-Z]

%%

{digit}+ printf("%d\n",atoi(yytext));
{fract}+ printf("%f\n",atof(yytext));
{character}+ printf("%s\n",yytext);



Con la compilazione non ci sono problemi, ma il problema un comportamento non voluto che non so come evitare.
In pratica quello che voglio fare stampare la stringa che digita l' utente, per se l' utente digita un intero, viene convertito con atoi, se digita un numero reale viene convertito con atof.
Ma il problema che se ad esempio digito "0.09" viene stampato:


0.000000
9


Due cose che non capisco:
-Perch stampa 0.0 ? Non dovrebbe convertire la stringa in 0.090000?
-Come evitare che stampi anche 9? In effetti 0.09 una stringa che contiene anche un intero.Come specificare che se un numero reale va stampata solo la stringa convertita con atof?

ramy89
09-02-2012, 19:48
Non ci avevo pensato alla combinazioni :





natural [0-9]+
real [0-9]+"."[0-9]*

%%

{natural} printf("%d\n",atoi(yytext));
{real} printf("%.4f\n",atof(yytext));



Cos funziona.

Loading