Ho questo file in formato lex:

codice:

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:
codice:
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?