Fonctions de bibliothèque intégrées pour la saisie utilisateur | sscanf, scanf_s, fscanf_s, sscanf_s

Le langage de programmation C fournit diverses fonctions de bibliothèque intégrées pour la saisie utilisateur. Dans cet article, nous découvrirons les fonctions de la bibliothèque sscanf scanf_s fscanf_s sscanf_s en C.

1. Fonction sscanf() en C

sscanf() est utilisé pour lire l'entrée formatée à partir de la chaîne. Les fonctions scanf() et sscanf() sont similaires, la seule différence entre elles est que la fonction scanf() lit l'entrée de l'utilisateur à partir d'une entrée standard comme un clavier et la fonction sscanf() lit l'entrée d'une chaîne et stocke l'entrée dans une autre chaîne.

Syntaxe

int   sscanf   ( const char *   str   const char *   format   ...); 

Paramètres

    str : Chaîne d'entrée à partir de laquelle nous voulons lire les données. format : Une chaîne qui contient le(s) spécificateur(s) de type. … (points de suspension) : Cela indique que la fonction accepte un nombre variable d'arguments.

Valeur de retour

  • En cas de succès, la fonction renvoie le nombre de valeurs lues avec succès.
  • En cas d'échec d'entrée, avant que les données puissent être lues avec succès, EOF est renvoyé.

Note : Il doit y avoir au moins autant de ces arguments que le nombre de valeurs stockées par les spécificateurs de format.

Exemple : programme C pour illustrer la fonction sscanf

C
   // C program to illustrate sscanf statement   #include         int     main  ()   {      // declaring array s      char     s  []     =     '3 red balls 2 blue balls'  ;      char     str  [  10  ]     str2  [  10  ];      int     i  ;      // %*s is used to skip a word      sscanf  (  s       '%d %*s %*s %*s %s %s'       &  i       str       str2  );      printf  (  '%d %s %s   n  '       i       str       str2  );      return     0  ;   }   

Sortir
3 blue balls  

2. fonction scanf_s() en C

Cette fonction est spécifique aux compilateurs Microsoft. C'est la même chose que scanf sauf qu'il ne provoque pas de surcharge du tampon. La fonction scanf_s() est plus sécurisée que la fonction scanf() car elle fournit un paramètre supplémentaire pour spécifier la taille du tampon afin d'éviter un débordement de tampon.

Syntaxe

int   scanf_s  (const char *format [argument]...); 

Paramètres

    flux  : Pointeur vers l'objet File qui identifie le flux. format : C'est une chaîne qui contient le(s) spécificateur(s) de type. … (points de suspension) : Cela indique que la fonction accepte un nombre variable d'arguments.

Note : Ici, nous pouvons spécifier la taille du tampon et contrôler réellement la limite d'entrée afin que l'ensemble de l'application ne plante pas en raison d'un débordement de mémoire.

Valeur de retour

  • En cas de succès, la fonction renvoie le nombre de valeurs lues.
  • Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.

Pourquoi utiliser scanf_s() ?

scanf lit simplement toute entrée fournie par la console. C ne vérifie pas si l'entrée utilisateur s'adaptera à la variable que vous avez désignée. Si vous avez un tableau appelé color[3] et que vous utilisez scanf pour la chaîne Red, cela fonctionnera correctement, mais si l'utilisateur saisit plus de 3 caractères, scanf commence à écrire dans la mémoire qui n'appartient pas au tableau de couleurs.

C ne détectera pas cela ni ne vous avertira et il pourrait ou non planter le programme selon que quelque chose essaie d'accéder et d'écrire sur cet emplacement mémoire qui n'appartient pas à la matrice de couleurs. C'est là que scanf_s entre en jeu. scanf_s vérifie que l'entrée de l'utilisateur tiendra dans l'espace mémoire donné.

Note : scanf_s() ne fonctionnera que dans Microsoft Visual Studio.

Exemple 1 : programme C pour illustrer la fonction sscanf_s

C
   // C program to illustrate sscanf_s statement   // scanf_s() will only work in Microsoft Visual Studio.   #include         #include         int     main  ()   {      char     a  [  5  ];      // sizeof(a) is buffer size      scanf_s  (  '%s'       a       sizeof  (  a  ));      printf  (  '  n  %s '       a  );      return     0  ;   }   


Entrée 1

Red 

Sortie 1

Red 

Entrée 2

Yellow 

Sortie 2

No Output 

Exemple 2 : programme C pour illustrer la relation entre la taille du tampon et la taille du tableau.

C++
   // C++ program   // consumes the Enter key   // (newline character) pressed after input   #include         int     main  ()   {      // example      char     ch  [  100000  ];      printf  (  'Enter characters: '  );      scanf_s  (  '%s'       ch       99999  );      getchar  ();      return     0  ;   }   
C
   // C program   // consumes the Enter key   // (newline character) pressed after input   #include         int     main  ()   {      char     ch  [  100000  ];      printf  (  'Enter characters: '  );      scanf_s  (  '%s'       ch       99999  );      getchar  ();      return     0  ;   }   
  • Si la taille du tampon est égale ou inférieure à la taille du tableau, une saisie supérieure ou égale à la taille du tampon entraînera une perte de données car les données en excès seront tronquées et les données jusqu'à la taille du tampon - 1 seront lues.
  • Si la taille du tampon est supérieure à la taille d'un tableau, alors
    • une saisie plus petite que la taille du tampon fonctionnera mais donnera une erreur
    • une saisie supérieure à la taille du tampon entraînera un débordement de tampon et donnera la même erreur.

3. Fonction fscanf_s() en C

La différence entre fscanf() et fscanf_s() est la même que celle entre scanf() et scanf_s(). fscanf_s() est une fonction sécurisée qui nécessite que la taille de chaque champ de type c C s S et [ ] soit transmise comme argument immédiatement après la variable.

Syntaxe

int fscanf_s( FILE *stream const char *format [argument ]... ); 

Paramètres

    str : chaîne utilisée pour récupérer les données format : chaîne qui contient le(s) spécificateur(s) de type … (points de suspension) : Cela indique que la fonction accepte un nombre variable d'arguments.

Note : fscanf_s a un paramètre supplémentaire pour spécifier la taille du tampon et contrôler réellement la limite de l'entrée.

Valeur de retour

  • En cas de succès, la fonction renvoie le nombre de valeurs lues avec succès.
  • Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.

Note : fscanf_s fonctionnera uniquement dans MS Visual studio.

Exemple : programme C pour illustrer la fonction fscanf_s

C
   // C program to illustrate fscanf_s statement   // This program will run on MS Visual studio   #include         #include         int     main  ()   {      char     s1  [  10  ]     s2  [  10  ]     s3  [  10  ];      int     year  ;      // file pointer      FILE  *     fp  ;      // Open file securely      fopen_s  (  &  fp       'file.txt'       'w+'  );      fputs  (  'Hello World its 2017'       fp  );      rewind  (  fp  );      // Using fscanf_s      fscanf_s  (  fp       '%s'       s1       sizeof  (  s1  ));      fscanf_s  (  fp       '%s'       s2       sizeof  (  s2  ));      fscanf_s  (  fp       '%s'       s3       sizeof  (  s3  ));      fscanf_s  (  fp       '%d'       &  year       sizeof  (  year  ));      printf  (  'String1 |%s|  n  '       s1  );      printf  (  'String2 |%s|  n  '       s2  );      printf  (  'String3 |%s|  n  '       s3  );      printf  (  'Integer |%d|  n  '       year  );      fclose  (  fp  );      return     (  0  );   }   


Sortir

String1 |Hello| String2 |World| String3 |its| Integer |2017| 

4. Fonction sscanf_s() en C

sscanf_s() est une fonction sécurisée de sscanf() et les fonctions sécurisées nécessitent que la taille de chaque champ de type c C s S et [ soit passée comme argument immédiatement après la variable.

Syntaxe

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...); 

Paramètres

    str : chaîne utilisée pour récupérer les données format : chaîne qui contient le(s) spécificateur(s) de type … (points de suspension) : Cela indique que la fonction accepte un nombre variable d'arguments.

Note : sscanf_s a un paramètre supplémentaire pour spécifier la taille du tampon et contrôler réellement la limite de l'entrée.

Valeur de retour

  • En cas de succès, la fonction renvoie le nombre de valeurs lues avec succès.
  • Dans le cas d'un échec d'entrée avant que les données puissent être lues avec succès, EOF est renvoyé.

Note : sscanf_s() ne fonctionnera que dans Microsoft Visual Studio.

Exemple : programme C pour illustrer la fonction sscanf_s

C
   // C program to illustrate sscanf_s statement   // This program will run on MS Visual studio   #include         int     main  ()   {      char     s  []     =     '3 red balls 2 blue balls'  ;      char     str  [  10  ]     str2  [  10  ];      int     i  ;      // %*s is used to skip a word      sscanf_s  (  s       '%d'       &  i       sizeof  (  i  ));      sscanf_s  (  s       '%*d %*s %*s %*s %s'       str       sizeof  (  str  ));      sscanf_s  (  s       '%*d %*s %*s %*s %*s %s'       str2        sizeof  (  str2  ));      printf  (  '%d %s %s   n  '       i       str       str2  );      return     0  ;   }   


Sortir

3 blue balls 

Créer un quiz