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
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
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 );
}
0
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 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
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