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.
Série Notée: Utilisation de sscanf() pour la lecture du sciper
Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper
Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper
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.
Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper
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!
Re: Série Notée: Utilisation de sscanf() pour la lecture du sciper
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.