Gestion d'erreur en C
Fermé
Nuubboo
-
15 mai 2022 à 03:28
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 16 mai 2022 à 09:33
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 16 mai 2022 à 09:33
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
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Logiciel gestion photo gratuit - Guide
- Erreur 1001 outlook - Accueil - Bureautique
- Logiciel gestion cave à vin gratuit excel - Télécharger - Cuisine & Gastronomie
2 réponses
Dalfab
Messages postés
706
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
2 novembre 2023
101
15 mai 2022 à 12:54
15 mai 2022 à 12:54
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 ?
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
Modifié le 16 mai 2022 à 10:26
Modifié le 16 mai 2022 à 10:26
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 ?