Sscanf perplessità

di il
2 risposte

Sscanf perplessità

Ciao a tutti,
al riguardo della sscanf mi è abbastanza tutto chiaro. Ma leggendo alcuni esempi - che dovrebbero funzionare, ma non sembrerebbe - mi sta sorgendo qualche dubbio.

Supponiamo di voler utilizzare la sscanf per fare una veloce validazione di una stringa ad esempio - per riportare l'esempio precedentemente menzionato - di una data si potrebbe scrivere queste righe di codice:

Il primo caso ad esempio che la data sia nel seguente formato "1 Dic 2018":

  if(sscanf(data,"%d %s %d", &day, month, &year) == 3)
        {
            printf("forma valida: %s\n", data);
        }
In realtà a me pare che funzionni parzialemente, perché per esse è valida anche la stringa 1 12 2018. Sembrerebbe che in relatà il "12" sia visto come una stringa come previsto dal formattatorre. Come impedire questo?

Secondo caso un pochino più complesso, validare una formto data espresso nel seguente modo 12/1/2018

if (sscanf(data, "%d/%d/%d", &m, &day, &year) == 3)
        {
             printf("forma OK: %s\n", data);
        }
In realtà se passo a data una stringa "1/12/2018" non viene riconosciuta come valita, ma viene valida e nemmeno 1/12/2018.

Più in generale i codice proposto ad esempio ha come frammento di validazione, che per le ragioni che ho esposto non può funzionare, a meno di qualche probabile mia incomprensione.

       if(sscanf(data,"%d %s %d", &day, month, &year) == 3)
        {
            printf("forma valida: %s\n", data);
        }
        else if (sscanf(data, "%d/%d/%d", &m, &day, &year) == 3)
        {
             printf("forma OK: %s\n", data);
        }
        else
        {
             printf("forma non ammessa: %s\n", data);
        }
Come è possibile effettuare una validazione di questo tipo? E' sbagliato l'esempio o sto sbagliando io? Sto interpretando male la funzione dell'esempio. Esistono formattatori simil regular expressione, per la sscanf, che ignoro e non sono menzionati e/o usati correttamente nell'esempio che ho tratto studiando la sscanf?

Vi ringrazio molto.

2 Risposte

  • Re: Sscanf perplessità

    Il problema è che la sscanf non valida il formato. Non é questo il suo scopo.
  • Re: Sscanf perplessità

    oregon ha scritto:


    Il problema è che la sscanf non valida il formato. Non é questo il suo scopo.
    Ciao Oregon,
    come sempre, prima di tutto, grazie. Onestamente mi sfugge un po' l'utilità, visto che dal momento che in alcune circostante il tipo puntatore che viene passato conta bene poco dal punto di vista della verifica se sia presente un numero o una stringa.

    Inoltre, non capisco, l'esempio della forma "mm/gg/aa", gli slash vengono completamente ignorati. Possibile che l'esempio fosse sbagliato?
    Certamente c'è qualcosa che non ho compreso.
    Sapresti darmi un tuo parere? Che interpretazione dovrei dare a questi esempi di utilizzo? In definitiva qual è la reale utilità al di là di poter leggere da un stringa piuttosto dallo standard input?

    Grazie e un saluto.
Devi accedere o registrarti per scrivere nel forum
2 risposte