Gestion d'erreur en C

Nuubboo -  
[Dal] Messages postés 6122 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

2 réponses

  1. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    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
  2. 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
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      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