Getch et la touche "Entrer" en C [Résolu/Fermé]

Signaler
-
 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" :

   
 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

3 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 757
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,
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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);
}

Merci bcp pour votre aide !

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" ...
cependant , j'ai fais un test séparé (sans fonctions ni rien ) ça sors de la boucle ...
donc ... ça m'embrouille >< !
Messages postés
1022
Date d'inscription
samedi 21 août 2010
Statut
Membre
Dernière intervention
2 août 2015
117
Salut,
D'où tires-tu myconio.h ?
d'ici :
https://codes-sources.commentcamarche.net/
(pour remédier a l'absence de certaines fonctions dans conio.h ... ) vous pensez que le problème viens d'elle ? ( je vais tester et poster la réponse dans quelque minutes )
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 757
Beh, il y a un problème qui ne vient de je ne sais où.
Lorsque tu fais un getch() et que tu appuies sur la touche entrée, ça te retourne bien '\r'. Le problème vient peut-être de la fonction hide_cursor() (mais je ne vois pas pourquoi, là je tâtonne). Tu devrais essayer de compléter petit à petit ton code qui fonctionne avec les éléments du code qui ne marche pas jusqu'à reproduire le problème.
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 ..
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 757
ç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 ;-)))
merci encore ;)
Messages postés
1022
Date d'inscription
samedi 21 août 2010
Statut
Membre
Dernière intervention
2 août 2015
117
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é... ;)