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