Getch et la touche "Entrer" en C
Résolu/Fermé3 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
2 mars 2011 à 23:07
2 mars 2011 à 23:07
Avec ce code il n'y a pas besoin d'appuyer deux fois sur entrée, et il n'y a pas les deux caractères que tu annonces. Lorsque tu appuies sur entrée, seul le caractère '\r' ira dans getche().
Le problème vient peut-être d'ailleurs.
Peux-tu en poster davantage ?
Cdlt,
Le problème vient peut-être d'ailleurs.
Peux-tu en poster davantage ?
Cdlt,
voila le code complet
#include <stdio.h> #include <stdlib.h> #include <myconio.h> #include <windows.h> void hide_cursor() { CONSOLE_CURSOR_INFO cursor = {1, FALSE}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor); } void show_cursor() { CONSOLE_CURSOR_INFO cursor = {1, TRUE}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor); } void trace_interface() { int i; gotoxy(1,1); printf("%c",201); for(i=1;i<=120-2;i++) { printf("%c",205); } printf("%c",187); for(i=2;i<=48;i++) { gotoxy(1,i); printf("%c",186); gotoxy(120,i); printf("%c",186); } printf("%c",200); for(i=1;i<=120-2;i++) { printf("%c",205); } printf("%c",188); gotoxy(1,3); printf("%c",204); for(i=1;i<=120-2;i++) { printf("%c",205); } printf("%c",185); gotoxy(35,2); printf("Application Artisanale De Gestion Comerciale V1.0"); } int show_menu(char menu[10][255]) { int i,min=0,max=0; hide_cursor(); trace_interface(); int btn; for(i=1;i<=10;i++) { if((int)menu[i][0]!=0) { max++; gotoxy(30,i*2+15); printf("%s \n",menu[i]); } } int choix=1; while (btn != 13) { btn= getch (); } show_cursor(); } void main() { int hauteur,largeur; system("cls"); system("mode con LINES=50 COLS=120"); system("Color 17"); int operation; char menu[6][255]; strcpy(menu[1],"MENU 1"); strcpy(menu[2],"MENU 2"); strcpy(menu[3],"MENU 3"); strcpy(menu[4],"MENU 4"); strcpy(menu[5],"MENU 5"); strcpy(menu[6],"MENU 6"); show_menu(menu); // system("cls"); printf("==>%d",operation); }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
3 mars 2011 à 14:59
3 mars 2011 à 14:59
Je ne vois aucune raison pourquoi il faut appuyer deux fois sur la touche entrée.
As-tu bien recompilé ton code et confirmes-tu que c'est bien ce code ?
As-tu bien recompilé ton code et confirmes-tu que c'est bien ce code ?
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
3 mars 2011 à 21:35
3 mars 2011 à 21:35
On va faire un petit test.
Remplace la boucle par :
while (btn != 13)
{
btn= getch ();
printf("%d ",btn);
}
fflush(stdout);
D'ailleurs, petite remarque, t'as oublié d'initialiser ta variable btn. Donc quand tu la compares à 13, tu la compares à n'importe quel valeur. Met par exemple : int btn=0;
Une fois que tu as recompilé, appuie sur la touche entrée et post le résultat que tu obtiens.
Cdlt,
Remplace la boucle par :
while (btn != 13)
{
btn= getch ();
printf("%d ",btn);
}
fflush(stdout);
D'ailleurs, petite remarque, t'as oublié d'initialiser ta variable btn. Donc quand tu la compares à 13, tu la compares à n'importe quel valeur. Met par exemple : int btn=0;
Une fois que tu as recompilé, appuie sur la touche entrée et post le résultat que tu obtiens.
Cdlt,
Merci bcp pour votre aide !
Voila j'ai remplacé par ça :
kan je clique sur n'importe quel touche , ça affiche son ascii au premier appuie
puis j'appuie sur entreé une fois , rien ne se passe , deuxieme fois ça affiche l'ascii 13 et " sortie de boucle" ...
Voila j'ai remplacé par ça :
while (btn != 13) { btn= getch (); printf("%d ",btn); } fflush(stdout); printf("Sortie de boucle");
kan je clique sur n'importe quel touche , ça affiche son ascii au premier appuie
puis j'appuie sur entreé une fois , rien ne se passe , deuxieme fois ça affiche l'ascii 13 et " sortie de boucle" ...
Merci fiddy !! tu m'a beaucoup aidé !
en fait avec "myconio.h" le problème ne se pose pas quand je l'utilise directement , mais dans ma source pour des raisons que je ne saurais expliquer , ça marche pas ! bref , myconio.h modifie getch() , donc j'ai supprimé les modifications sur getch() et inclus conio.h en + de myconio.h
problème réglé =)
ça apprend a ne pas faire confiance a toutes les sources qu'on trouve sur le NET ..
en fait avec "myconio.h" le problème ne se pose pas quand je l'utilise directement , mais dans ma source pour des raisons que je ne saurais expliquer , ça marche pas ! bref , myconio.h modifie getch() , donc j'ai supprimé les modifications sur getch() et inclus conio.h en + de myconio.h
problème réglé =)
ça apprend a ne pas faire confiance a toutes les sources qu'on trouve sur le NET ..
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
3 mars 2011 à 22:33
3 mars 2011 à 22:33
ça apprend a ne pas faire confiance a toutes les sources qu'on trouve sur le NET ..
Ca c'est clair et pas que sur le net. Les livres du commerce contiennent également des erreurs.
Bonne continuation et à une prochaine sur CCM ;-)))
Ca c'est clair et pas que sur le net. Les livres du commerce contiennent également des erreurs.
Bonne continuation et à une prochaine sur CCM ;-)))
Bilow
Messages postés
1022
Date d'inscription
samedi 21 août 2010
Statut
Membre
Dernière intervention
2 août 2015
117
3 mars 2011 à 22:41
3 mars 2011 à 22:41
C'est vrai, fais toujours attention. Ca fait perdre du temps bêtement ! Quand j'ai lu ton code j'ai pensé à myconio.h, qui n'est pas un header par défaut, alors je te l'ai signalé... ;)