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.