1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <stdio.h>
// Vérifie que tous les nombres trouvés dans saisie font partie de la table tirage.
// Si un des nombres n'est pas dans le tirage, sa valeur est renvoyée.
// Sinon, renvoie -1.
// La table tirage doit se terminer par 0. (on suppose que 0 ne peut jamais faire partie du tirage)
int verifie_nombres ( const int * tirage , const char * saisie )
{
int i,n = -1 ;
const char * c ;
for ( c = saisie ; *c ; ++c )
{
// si le caractère courant est un chiffre on m-à-j la valeur de n
if (('0' <= *c) && (*c <= '9'))
{
if (n < 0) n = 0 ;
n = n*10 + *c - '0' ;
}
else
if (n >= 0)
{
// on parcourt tirage jusqu'à avoir trouvé n ou 0
for ( i = 0 ; tirage[i] > 0 ; ++i )
if (tirage[i] == n)
break ;
// si on a atteint la fin (càd 0) on sort
if (tirage[i] == 0)
return n ;
// sinon, on remet n à -1 et on continue l'analyse
n = -1 ;
}
}
// si on arrive ici, c'est qu'on a fini sans erreur !
return -1 ;
}
void main ()
{
char saisie [] = " 5 * 8 + 3 * ( 5 - 6 ) - 14/7" ;
int tirage [] = { 14,3,7,5,8,0 } ; // bien penser à finir par 0 !
int n = verifie_nombres( tirage,saisie ) ; // doit renvoyer 6
if (n >= 0)
printf("nombre %d invalide\n",n ) ;
} |
Partager