Comment ameliorer la fonction scanf

Fermé
William Tapi - 18 juin 2013 à 19:43
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 juin 2013 à 21:43
slt j'ai un probleme en C. en fait, pour recuperer les donnees de l'utilisateur: par exemple un nombre en entree, on utilise generalement la fonction scanf, or ce qui se passe est que l'utilisateur finit d'entrer ses donnees avant que le programme continue de s'executer. Mais je veux que chaque fois qu'il tape un caractere en entree, le programme s'execute sans qu'il n'ait besoin de taper la touche ENTREE

2 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
18 juin 2013 à 20:27
Le problème, c'est que lorsque tu tapes tes caractères c'est sur une invite de commande, une console, un terminal (peu importe le nom), c'est à dire une petite fenêtre qui sert d'interface pour lire les données et les envoyer au programme. Ce n'est donc pas directement le programme qui lit les caractères, il ne fait que lire ce que la console lui a envoyé. Tu dépends donc complètement du fonctionnement de la console qui n'enverra jamais aucune donnée tant que tu n'as pas appuyé sur entrée, ou une autre combinaison de touches acceptable (Ctrl+C par exemple). Le seul moyen de s'en sortir est d'utiliser une autre interface (graphique) que la console qui enverrait chaque touche appuyée, ce qui complique pas mal le programme.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
18 juin 2013 à 21:43
Bonjour,

Une autre alternative est de passer le terminal en raw.
Rien de portable, cela dépend donc de son OS.
Sous windows, tu peux utiliser la fonction _getche() qui te permettra de lire un caractère sans appuyer sur la touche entrée. A toi de gérer la boucle for pour lire une séquence de caractère. A toi de gérer également les conversions en nombre (strtol()). Etc.
Sinon, tu peux utiliser une bibliothèque (pas forcément graphique) PDCurses / NCurses.

Note bien que ton problème n'est pas d'améliorer scanf() : d'ailleurs t'auras bien du courage, il s'agit de l'une des fonctions les plus puissantes du C.
0