Comment utiliser sscanf correctement et en toute sécurité

Tout d'abord, d'autres questions sur l'utilisation de sscanf ne réponds pas à ma question parce que la réponse commune est de ne pas utiliser sscanf à tous et à l'utilisation fgets ou getch au lieu de cela, ce qui est impossible dans mon cas.

Le problème, c'est mon C professeur veut que j'utilise scanf dans un programme. C'est une exigence.
Toutefois, le programme doit également gérer toutes les entrée incorrecte.

Le programme doit lire un tableau d'entiers. Il n'a pas d'importance dans ce format les entiers
pour le tableau sont fournis. Pour rendre la tâche plus facile, le programme peut lire d'abord la taille de la matrice, puis les nombres entiers de chaque dans une nouvelle ligne.

Le programme doit gérer les entrées comme ceux-ci (et rapport d'erreurs de manière appropriée):

  1. 999999999999999...9 (nombres supérieurs entier)
  2. 12a3 (ne pas lire ce que d'un nombre entier 12)
  3. a...z (chaînes de caractères)
  4. 11 aa 22 33\n dans une seule ligne (ce qui peut être gérée par jeter tout ce qui est après 11)
  5. entrées plus grand que le tableau d'entrée

Il y a peut être plus mauvaise des cas, ce sont les seuls peu de ce que je pouvais penser.

Si l'erreur de saisie est fourni, le programme doit demander à l'utilisateur de saisir à nouveau jusqu'à ce
l'entrée correcte est donnée, mais la précédente entrée correcte doit être tenu (seulement incorrect
d'entrée doit être désactivée à partir du flux d'entrée).

Tout doit être conforme à la norme C99.

OriginalL'auteur evodevo | 2012-02-26