Gestion d'erreur en C
Nuubboo
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[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
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:
- Gestion d'erreur en C
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
- Logiciel gestion photo gratuit - Guide
- Logiciel gestion cabinet médical gratuit - Télécharger - Organisation
- Logiciel gestion cave à vin gratuit excel - Télécharger - Cuisine & Gastronomie
- Logiciel gestion garage - Télécharger - Organisation
2 réponses
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 ); }
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 ?
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 :
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
https://www.cplusplus.com/reference/cctype/isdigit/
Tu as d'autres caractères interdits ?
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 ?