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 816
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 816
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 816
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 816
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é... ;)