(C) restriction scanf
|
06-11-2012, 15h36
(Modification du message : 06-11-2012, 15h38 par InFamouZz.)
Message : #1
|
|
InFamouZz
Membre actif Messages : 76 Sujets : 21 Points: 3 Inscription : Dec 2011 |
(C) restriction scanf
salut
est-ce que quelqu'un sait comment on pourrais faire pour que dans un scanf l'utilisateur ne puisse taper qu'une seul caractère et que dans un autre scanf il ne puisse taper qu'un seul nombre merci de votre aide |
|
06-11-2012, 15h44
Message : #2
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: (C) restriction scanf
scanf() permet de parser / formater une entrée d'une certaine façon. elle n'autorisera cependant pas la restriction a la saisie. Pour ça, je te conseille de te tourner vers les termcaps (Terminal capabilities) qui te permettra de n'autoriser la saisie que d'un seul caractère par exemple. (On appelle ca mettre son terminal en mode raw)
Tu pourras trouver un exemple de code ici: http://www.cs.uleth.ca/~holzmann/C/system/ttyraw.c |
|
06-11-2012, 18h14
Message : #3
|
|
sakiir
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de Messages : 411 Sujets : 51 Points: 34 Inscription : Sep 2012 |
RE: (C) restriction scanf
alul ave strlen() et si 'est trop grand, et bien tu prend les mesures adequate !
|
|
13-11-2012, 00h55
Message : #4
|
|
InFamouZz
Membre actif Messages : 76 Sujets : 21 Points: 3 Inscription : Dec 2011 |
RE: (C) restriction scanf
c'est bon mais je voudrais que l'utilisateur ne saisies uniquement un chiffre sinon ca lui demande de reesayer
c'est pas possible ? |
|
13-11-2012, 08h47
Message : #5
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: (C) restriction scanf
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
13-11-2012, 10h37
Message : #6
|
|
InFamouZz
Membre actif Messages : 76 Sujets : 21 Points: 3 Inscription : Dec 2011 |
RE: (C) restriction scanf
oui mais je debute et je voudrais utiliser scanf()
|
|
13-11-2012, 10h38
(Modification du message : 13-11-2012, 10h47 par supersnail.)
Message : #7
|
|
supersnail
Éleveur d'ornithorynques Messages : 1,614 Sujets : 72 Points: 466 Inscription : Jan 2012 |
RE: (C) restriction scanf
On t'a dit, c'est pas possible avec scanf (cf encore la réponse de Ark).
Edit: "je débute" n'est pas une excuse valable.
Mon blog
Code : push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp "VIM est merveilleux" © supersnail |
|
15-11-2012, 16h19
Message : #8
|
|
sakiir
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de Messages : 411 Sujets : 51 Points: 34 Inscription : Sep 2012 |
RE: (C) restriction scanf
je t'ai envoyé une fonction qui permetait de le faire !!
|
|
15-11-2012, 20h09
Message : #9
|
|
-Mat- Non-enregistré |
RE: (C) restriction scanf
Il est toujours possible d'utiliser une autre fonction que tu devras faire toi même après scanf() pour vérifier si l'entrée correspond à un nombre. Je peux toujours te donner des indices :
Il faut d'abord vérifier que chaque caractère de la chaine correspond à un chiffre (donc dans le codage ASCII : de 30 à 39) et qui renvoie 1 si c'est un nombre et 0 si c'est autre chose (donc moyen de mettre cette fonction comme condition de la boucle). Ensuite tu peux utiliser strtol qui permet de changer une chaine en nombre (en long par contre). Pour limiter le nombre de caractère à écrire à l'écran, c'est pas possible avec scanf() mais après tu peux toujours choisir de ne prendre que le premier caractère : chaine[0]. |
|
15-11-2012, 20h21
Message : #10
|
|
Luxerails
Bon membre Messages : 267 Sujets : 6 Points: 67 Inscription : Aug 2011 |
RE: (C) restriction scanf |
|
15-11-2012, 21h03
Message : #11
|
|
-Mat- Non-enregistré |
RE: (C) restriction scanf
(15-11-2012, 20h21)Luxerails a écrit :(15-11-2012, 20h09)-Mat- a écrit : (donc dans le codage ASCII : de 30 à 39) Sorry ! J'ai encore un peu de mal avec les bases. Et sinon InFamouZz, tu peux évidemment créer ta propre fonction qui transforme une chaine en nombre mais comme tu dis que tu es débutant. |
|
15-11-2012, 22h08
Message : #12
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: (C) restriction scanf
(15-11-2012, 21h03)-Mat- a écrit : Et sinon InFamouZz, tu peux évidemment créer ta propre fonction qui transforme une chaine en nombre mais comme tu dis que tu es débutant. recoder la fonction atoi n'est pas très complique en soi. Il suffit de réfléchir un tout petit peu a comment stocker le résultat au fur et a mesure, c'est tout a fait faisable, et un très bon exercice pour un débutant. |
|
15-11-2012, 22h24
Message : #13
|
|
-Mat- Non-enregistré |
RE: (C) restriction scanf
Je vais d'ailleurs la faire moi-même ! Je viens d'imaginer le code.
Après pourquoi autant s'embêter alors que Python gère les chaine beaucoup plus facilement |
|
15-11-2012, 22h27
Message : #14
|
|
ark
Psyckomodo! Messages : 1,033 Sujets : 48 Points: 317 Inscription : Sep 2011 |
RE: (C) restriction scanf
(15-11-2012, 22h24)-Mat- a écrit : Après pourquoi autant s'embêter alors que Python gère les chaine beaucoup plus facilement Et bien le jour ou tu n'auras pas la possibilité d'utiliser python pour une raison quelconque, tu seras bien content de pouvoir le faire en C :p Apres, que python le gere mieux, je suis pas d'accords, il existe en nombre enorme de fonctions de lib C qui permettent de faire presque autant de traitement qu'en python |
|
16-11-2012, 18h19
Message : #15
|
|
-Mat- Non-enregistré |
RE: (C) restriction scanf
Oui sauf qu'en Python, la gestion est directe / inné (je cherche le mot adapté mais je l'ai pas trouvé).
Après c'est vrai qu'avec les bibliothèques tous les traitements de bases sont déjà écrits quelques soient les langages et directement intégrés. |
|
« Sujet précédent | Sujet suivant »
|
Utilisateur(s) parcourant ce sujet : 1 visiteur(s)