Création
d'entreprise
Posez votre question Signaler

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

free - Dernière réponse le 3 mars 2011 à 22:43
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
Lire la suite 

Getch et la touche "Entrer" en C »

15 réponses
Réponse
+2
moins plus
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,
Ajouter un commentaire
Réponse
+0
moins plus
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);
}

Bilow- 3 mars 2011 à 22:06
Salut,
D'où tires-tu myconio.h ?
free - 3 mars 2011 à 22:11
d'ici :
http://www.cppfrance.com/...
(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 )
fiddy- 3 mars 2011 à 22:14
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ..
free - 3 mars 2011 à 22:37
merci encore ;)
Bilow- 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é... ;)
free - 3 mars 2011 à 22:43
merci bcp ^^
Ajouter un commentaire
Ce document intitulé « getch et la touche "Entrer" en C » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?