Getch et la touche "Entrer" en C
Résolu
free
-
free -
free -
Bonsoir,
pour la préparation d'un TP je me retrouve avec un problème , pour sortir de la boucle il faut appuyer sur la toucher "Entrer" :
cependant ,avec ce code il faut appuyer deux fois sur "Entrer" pour en sortir
je sais bien que le problème viens des deux caractères \r\n de la touche entrer , mais comment y remédier ??!
Cordialement
pour la préparation d'un TP je me retrouve avec un problème , pour sortir de la boucle il faut appuyer sur la toucher "Entrer" :
while((int)btn != 13 ) { btn = getche(); }
cependant ,avec ce code il faut appuyer deux fois sur "Entrer" pour en sortir
je sais bien que le problème viens des deux caractères \r\n de la touche entrer , mais comment y remédier ??!
Cordialement
A voir également:
- Code ascii touche entrée
- Code ascii - Guide
- Touche remanente windows - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
3 réponses
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); }
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 ..