Mi riferisco alla seconda versione della funzione (post delle 10,09).
La terzultima riga "if (z!=8 || i!=5)"
contiene il confronto "i!=5" che ha sempre valore vero (1),
infatti dopo l'esecuzione del ciclo i vale 10
(a meno che il ciclo non sia stato interrotto in anticipo
per il "return 0" interno al ciclo, ma in questo caso il confronto
in oggetto non viene fatto).
La funzione cosi' formulata rende sempre in uscita il valore 0.
Quindi bisogna togliere il confronto "i!=5",
ottenendo "if (z!=8) return 0", che verifica che le cifre siano 8.
Ma non basta.
La verifica della condizione "if(i!=2 && i!=5)"
segnala - giustamente - la presenza di una barra fuori posto,
cosi' la funzione rende in uscita 0.
Pero' non viene rilevata l'assenza di una o di entrambe le barre;
il contatore di barre j viene correttamente incrementato,
ma non viene poi utilizzato.
Cosi' la funzione rende in uscita 1 anche in caso di stringhe-non-data,
come 24y07/2015, 24z07/2015, 24u07e2015, 12345678aa; le cifre sono sempre 8,
ma le barre non sono 2.
Per eliminare l'inconveniente, bisogna aggiungere il confronto "j!=2"
nella terzultima riga: "if (z!=8 || j!=2)"; cosi' viene verificato
che ci siano 8 cifre e 2 barre.
Se non puoi usare isdigit(), puoi creare tu una funzione analoga,
come questa:
int cifra(char carattere)
{
if (carattere=='0') return 1;
if (carattere=='1') return 1;
if (carattere=='2') return 1;
if (carattere=='3') return 1;
if (carattere=='4') return 1;
if (carattere=='5') return 1;
if (carattere=='6') return 1;
if (carattere=='7') return 1;
if (carattere=='8') return 1;
if (carattere=='9') return 1;
return 0;
}
Se il professore non consente di creare una funzione simile,
puoi inserire le verifiche nella funzione is_date().
Il metodo di Wolt va bene, ma ipotizzo che potrebbe ridurre la portabilita'
della funzione in ambienti che non usano il codice ASCII.
Secondo me, e' meglio usare per le variabili dei nomi esplicativi,
che ne illustrino l'impiego. Ad es., il contatore di cifre invece di z
potrebbe chiamarsi n_cifre, num_cifre e simili.
In questo modo i programmi diventano piu' leggibili e questo facilita
le cose sia all'autore che agli altri.