N-PN White-Hat Project
(C) restriction scanf - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages compilés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=25)
+--- Sujet : (C) restriction scanf (/showthread.php?tid=2372)

Pages : 1 2


(C) restriction scanf - InFamouZz - 06-11-2012

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 Shy


RE: (C) restriction scanf - ark - 06-11-2012

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


RE: (C) restriction scanf - sakiir - 06-11-2012

alul ave strlen() et si 'est trop grand, et bien tu prend les mesures adequate !


RE: (C) restriction scanf - InFamouZz - 13-11-2012

c'est bon mais je voudrais que l'utilisateur ne saisies uniquement un chiffre sinon ca lui demande de reesayer
c'est pas possible ?


RE: (C) restriction scanf - supersnail - 13-11-2012

Me semble que Ark y'a répondu..

Sinon ben http://www.google.fr/ ...


RE: (C) restriction scanf - InFamouZz - 13-11-2012

oui mais je debute et je voudrais utiliser scanf()


RE: (C) restriction scanf - supersnail - 13-11-2012

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.


RE: (C) restriction scanf - sakiir - 15-11-2012

je t'ai envoyé une fonction qui permetait de le faire !! Smile


RE: (C) restriction scanf - -Mat- - 15-11-2012

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].


RE: (C) restriction scanf - Luxerails - 15-11-2012

(15-11-2012, 20h09)-Mat- a écrit : (donc dans le codage ASCII : de 30 à 39)

En hexadécimal hein ! sinon en base 10 c'est de 48 à 57.


RE: (C) restriction scanf - -Mat- - 15-11-2012

(15-11-2012, 20h21)Luxerails a écrit :
(15-11-2012, 20h09)-Mat- a écrit : (donc dans le codage ASCII : de 30 à 39)

En hexadécimal hein ! sinon en base 10 c'est de 48 à 57.

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.


RE: (C) restriction scanf - ark - 15-11-2012

(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.


RE: (C) restriction scanf - -Mat- - 15-11-2012

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 Smile


RE: (C) restriction scanf - ark - 15-11-2012

(15-11-2012, 22h24)-Mat- a écrit : Après pourquoi autant s'embêter alors que Python gère les chaine beaucoup plus facilement Smile

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 Wink


RE: (C) restriction scanf - -Mat- - 16-11-2012

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.