Série Notée: Utilisation de sscanf() pour la lecture du sciper

Série Notée: Utilisation de sscanf() pour la lecture du sciper

by Benedek Hauer -
Number of replies: 5

Bonjour,
Dans la réponse d'un post (https://moodlearchive.epfl.ch/2019-2020/mod/forum/discuss.php?d=28983#p58768), c'était écrit "Ce que je peux te conseiller, c'est de peut être essayer une autre approche comme par exemple utiliser "fgets" pour récupérer chaque ligne et ensuite traiter manuellement les entrées à lire ou bien utiliser "sscanf" ensuite sur la chaîne récupérée par "fgets"."

Ma question est: Est-ce que nous avons le droit d'utiliser sscanf pour lire les SCIPER ?

Car on nous donne le format fscanf(     , "%" SCNu32,  ) avec les deux champs à remplir, et on nous dit dans la consigne "le format pour lire un SCIPER est donné en commentaire ; remplissez les deux autres champs de fscanf(), mais ne modifiez pas le champs format."

Merci d'avance et bonne journée.

In reply to Benedek Hauer

Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper

by Cédric Viaccoz -
Sauf contre indication du professeur, je ne vois pas pourquoi vous n'auriez pas le droit d'utiliser sscanf. Ceci dit, sscanf est essentiellement la même fonction que scanf ou fscanf, sauf qu'au lieu de lire depuis l'entree standard ou un fichier, elle va lire depuis une chaîne de char (i.e. une "string" à la C). De ce fait, tout le formattage est identique entre ces 3 fonctions, le format pour lire les SCIPER devra être le même que vous utilisiez fscanf ou sscanf pour récupérer cette information.
In reply to Cédric Viaccoz

Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper

by Jean-Cédric Chappelier -

Je confirme : vous pouvez utiliser tout le C que vous voulez (pourquoi vous contraindrais-je ?) tant que vous répondez aux spécifications de la donnée.
Ceci dit : pourquoi chercher à faire compliqué ? Le code donné est là pour vous aider, pas pour vous embêter.

In reply to Jean-Cédric Chappelier

Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper

by Benedek Hauer -
Bonjour, 
Merci pour votre réponse!
La raison pour laquelle je pose la question, est, car le comportement de fscanf me paraît très étrange quand on lui donne un fichier qui ressemble à ceci:

1.1
2
3
0
5

A ce que j'ai pu remarquer, la valeur de fscanf va être valide, par contre, il va mettre 1 dans le sciper, 0.1 dans grade_sn, 2 dans grade_hw, 3 dans grade_exam, 0 dans type et 5 dans le sciper du teammate. Et donc au lieu de lancer une erreur (car, non seulement 5 champs sont donnés, mais en plus le sciper n'est pas valable) il va s'exécuter comme si le sciper était correct et tous les champs étaient remplis.  

A quoi ce comportement est-il dû?

Merci!
In reply to Benedek Hauer

Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper

by Cédric Viaccoz -

Ce comportement est assez normal, la première ligne pour chaque étudiant devrait être un SCIPER (i.e. un entier non signé), or dans ton exemple la première ligne est une entrée de type double. Le scanf voulant lire un entier non signé, va juste lire le "1", laissant le ".1" (qui en C est équivalent à "0.1") à lire pour le prochain scanf qui s'attend à un double pour la note de la série notée, et de ce fait les scanf sont décalés produisant le scénario que tu as décrit.