Gestion d'erreur en C

Nuubboo -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'aimerai rendre mon code plus sécurisé et j'aimerai que lorsque un utilisateur rentre du texte dans un scanf, il puisse rentré seulement une chaine de caractère et non un chiffre ou un nombre. Merci d'avance pour votre aide


Configuration: Windows / Opera 85.0.4341.79
A voir également:

2 réponses

Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
scanf()
n'est pas adaptée pour directement tester la validité des données. On peut faire :
- lire toute la ligne avec
fgets()

- et essayer de d'extraire des données dans la ligne, par exemple avec
sscanf()
qui ressemble à
scanf()
.
char  buffer[200], texte[200], autre[200];
double  vald;
if ( fgets( buffer, sizeof buffer, stdin ) ) {
    int  nb = sscanf( buffer, "%s%s", texte, autre );
    if ( nb >= 2 )      // sscanf() a réussi à lire au moins 2 choses
        printf( "vous avez entré plusieurs mots\n" );
    else if ( sscanf( buffer, "%lf", &vald ) >= 1 )  // lit correctement un flottant
        printf( "vous avez entré un nombre\n" );
    else if ( nb <= 0 )
        printf( "la ligne entrée est vide ou ne contient que des espaces\n" );
    else
        printf( "vous avez entré le mot '%s'\n", texte );
}
0
Nuubboo
 
Super merci pour ta réponse, que me conseillerais tu dans mon cas ou je dois rentrer des informations comme un nom ou un prénom mais en bloquant la saisie de nombre ?
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
En fait, tu considères que lorsqu'un nom ou un prénom est demandé, la réponse ne doit pas comporter de chiffres.

Ainsi, ton programme doit rejeter :
  • 40
  • Les 4 fantastiques
  • Richard 3


Par contre, j'imagine que tu acceptes "Quarante" ?

Il y a 182 M. ou Mme QUARANTE en France : http://www.geopatronyme.com/cdip/insolite/chiffre.html

Bref, si les chiffres sont, pour toi des caractères interdits, il te suffit de prendre la ligne saisie par l'utilisateur (avec
fgets()
comme proposé par Dalfab), et de vérifier si chaque caractère saisi jusqu'au retour à la ligne non compris n'est pas dans tes caractères interdits, par exemple en utilisant
isdigit()
.

https://www.cplusplus.com/reference/cctype/isdigit/

Tu as d'autres caractères interdits ?
0