Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [lex]stampa errata

    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?

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non ci avevo pensato alla combinazioni :

    codice:
    
    natural	[0-9]+
    real	[0-9]+"."[0-9]*
    
    %%
    
    {natural}	printf("%d\n",atoi(yytext));
    {real}	printf("%.4f\n",atof(yytext));
    Così funziona.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.