Aide en c
Fermé
Marine
-
27 déc. 2018 à 22:26
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 2 janv. 2019 à 12:48
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 2 janv. 2019 à 12:48
2 réponses
Hamster18
Messages postés
177
Date d'inscription
mercredi 2 janvier 2019
Statut
Membre
Dernière intervention
22 janvier 2024
2 janv. 2019 à 09:21
2 janv. 2019 à 09:21
Bonjour,
Pour cela il fait que tu remplace le %d ou %f habituelle de ton scanf par %c ( qui lit 1 caractère). Pour cela il faut au préalable que tu créé une varariable char dans tes déclarations. De plus si cette instruction est précéder d'autre inscription du style :"taper un entier"," taper un flottant " il faut que tu mette dans le scanf de cette instruction la %d%*c ( dans le cas d'un entier par exemple). Cela permet de nettoyer le buffer, sinon l'orque tu lancera l'instructin taper un caractère , le système considérera la touche entrée de l'instruction précédente comme u' caractère.
Cordialement.
Pour cela il fait que tu remplace le %d ou %f habituelle de ton scanf par %c ( qui lit 1 caractère). Pour cela il faut au préalable que tu créé une varariable char dans tes déclarations. De plus si cette instruction est précéder d'autre inscription du style :"taper un entier"," taper un flottant " il faut que tu mette dans le scanf de cette instruction la %d%*c ( dans le cas d'un entier par exemple). Cela permet de nettoyer le buffer, sinon l'orque tu lancera l'instructin taper un caractère , le système considérera la touche entrée de l'instruction précédente comme u' caractère.
Cordialement.
[Dal]
Messages postés
6198
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
13 décembre 2024
1 096
Modifié le 2 janv. 2019 à 12:51
Modifié le 2 janv. 2019 à 12:51
Salut Marine,
La solution de Hamster18 consistant à utiliser
Si cela te convient alors, tu peux faire comme cela (ou simplement utiliser
Si tu veux absolument que le programme C réagisse dès la pression d'une touche, il n'existe pas de fonction standard C permettant de le faire. Il faut passer par des méthodes et fonctions propres au système d'exploitation.
Pour une méthode simpliste sous Windows en mode console, tu peux utiliser
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/kbhit?view=msvc-160&viewFallbackFrom=vs-2017
En ce qui concerne le lancement de l'exécution d'un programme à partir du programme C, tu as une fonction standard du langage C
Dal
La solution de Hamster18 consistant à utiliser
scanf()avec
%cne récupérera la touche
'z'pressée qu'après que l’utilisateur ait pressé Entrée. Rien ne se passera de particulier lorsque la touche
'z'sera pressée,
scanf()bloquant l'exécution du programme tant que la saisie n'est pas validée car cette fonction travaille sur le flux stdin mis en tampon par ligne.
Si cela te convient alors, tu peux faire comme cela (ou simplement utiliser
getchar()qui aura le même comportement). Tu devras presser successivement
'z'et Entrée.
Si tu veux absolument que le programme C réagisse dès la pression d'une touche, il n'existe pas de fonction standard C permettant de le faire. Il faut passer par des méthodes et fonctions propres au système d'exploitation.
Pour une méthode simpliste sous Windows en mode console, tu peux utiliser
_getch()(éventuellement dans une boucle avec
_kbhit()pour un comportement non bloquant). Tu as de la doc avec un exemple là :
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/kbhit?view=msvc-160&viewFallbackFrom=vs-2017
En ce qui concerne le lancement de l'exécution d'un programme à partir du programme C, tu as une fonction standard du langage C
system(), qui peut suffire pour un programme simpliste. Elle n'offre cependant que peu de contrôle, et il peut être préférable d'utiliser là aussi des solutions offertes par l'API du système d'exploitation pour faire des choses plus élaborées.
Dal