CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

blindage saisie

poupstm2
poupstm2
Niveau 29
19 février 2012 à 00:12:03

salut a tous :)
dans le cadre d'un exercice,
je dois encoder dans des structures (struct) des données de différents types, comme des noms, age, numtel etc... (en gros, des int, des char et des long)

bref, je dois surtout verifier que les données entrée sont valides (blinder quoi)

le truc c'est que je sait pas trop comment faire...

j'avais pensé mettre dans une chaine de char toutes les informations, quels qu'elles soient (int,char,long confondus) et passer en revues case après case et vérifier le contenus
(dans le cas ou je veut vérifier que c'est bien un nombre, ou si je veut vérifier que c'est bien une lettre, voir que le nombre entré n'est pas trop grand ou trop petit)

mais je n'y arrive point (en utilisant gets(nomdutabchar) il n'accepte pas.

Donc si un de vous à des idées à me proposer, ca serait super :)
en vous remerciant d'avance

Aldebran
Aldebran
Niveau 10
19 février 2012 à 20:47:48

Je ne suis pas sûr de comprendre ce que tu veux faire ?
Déjà dans quel langage code-tu, et comment la récupération des valeurs est-elle réalisée ?

Pour l'instant je vais supposer que tu codes en C et que tu récupères tes valeurs via la console. Si j'ai bien compris l'utilisateur passe à la console une chaîne contenant toutes les informations du struct, donc une chaîne par exemple de la forme "Homme 20 0600000000" pour un homme de 20 ans possédant le numéro de téléphone 0600000000. Dans ce cas là il faut extraire les données de la chaîne de caractère puis les stocker dans des variables du bon type et les contrôler.

Mais si tu donnais plus de précision sur ce que tu veux faire et que tu présentais un peu comment tu comptes résoudre ton problème, j'aurais plus facile à t'aider.

chris_27
chris_27
Niveau 10
20 février 2012 à 13:44:20

« mais je n'y arrive point (en utilisant gets(nomdutabchar) il n'accepte pas. » :d) tant mieux pour toi. À chaque fois que tu utilises gets, ton code est gravement bogué.

Utilise TOUJOURS fgets à la place.

poupstm2
poupstm2
Niveau 29
20 février 2012 à 15:39:15

désolé du retard, j'ai eu des problèmes de connections :x

effectivement, je code en c

en fait, je dois gerer une struct "patient" dans la quel il y'a :
un numcarteSIS (long)
un nom (char)
un prénom (char)
rue&num (char)
un codepostal (int)
un numMedecin (int)
un nummutuelle (int)

et je dois verifier que:

pour les int, il entre bien des nombres (ca j'utilise le verif=scanf("%d",&nombre);)
mais j'aimerais une autre étape verifiant que c'est bien QUE des nombres qui ont été entré, mais aussi, que je puisse verifier que les nombres entrés soient possible,

par exemple, si l'utilisateur entre un code postal, ce nombre dois être compris entre 1000 et 4000 mais si il entre
1000_ je dois lui dire que ce qu'il à entré est faux.

sinon, je regarderais pour le fgets, merci :)

poupstm2
poupstm2
Niveau 29
20 février 2012 à 18:59:46

effectivement, fgets est plutôt joli :D

me reste plus qu'a tester caractère après caractère avec isdigit dans une boucle

chris_27
chris_27
Niveau 10
21 février 2012 à 13:48:08

« un nom (char)
un prénom (char) »
:d) même en chine où ils font dans les noms/prénoms courts, il y a au moins 2 caractères. :-)))

Sinon, ce que tu demandes ne peut pas se faire avec scanf (et de fait, scanf ne le fait pas parce qu'on ne veut pas le faire). Si l'utilisateur te rentre des choses incohérentes, tu récupère ce que tu peux/veux avec scanf, et tu jettes le reste. C'est pas la peine de passer son énergie à rattraper les erreurs d'un utilisateur qui fait n'importe quoi. :(

PS: si vraiment tu veux faire ça, il va falloir mettre en place un lexer (vois ça comme ton propre scanf, qui va récupérer pile poil ce que tu veux), Mais je te préviens, c'est hautement plus complexe que d'utiliser scanf.

poupstm2
poupstm2
Niveau 29
21 février 2012 à 14:15:18

le truc c'est qu'on est obligé de dire a l'utilisateur qu'il à commis une erreur quand il l'as fait.
(sinon je me serait largement contenté d'un :
Verif=scanf("%d",&nombre); )

je me suis lancé ce matin dans la fonction de blindage, je prendrais tout ce que l'utilisateur entre avec un fgets, ensuite j’analyserais le string caractère par caractère, et si la verif s'est bien passé, je le convertirais avec sscanf

chris_27
chris_27
Niveau 10
21 février 2012 à 14:21:20

Bref, tu réécris ton propre lexer quoi... C'est fondamentalement stupide, mais je suppose qu'on ne peut pas se torcher avec tes consignes quand elles sont déraisonnables. :(

poupstm2
poupstm2
Niveau 29
21 février 2012 à 14:59:34

pour l'instant la vérification à l'air de fonctionner...

j'ai fait ça, me reste plus qu'a l'appliquer aux autres champs
http://paste.maxux.net/198989231

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment