IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

getch() et <conio>


Sujet :

C

  1. #1
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut getch() et <conio>
    Mais qu'est ce qui ne va pas dans ce code ci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #include <curses.h>
     
    main() {
    char c;
    c=getch();
    printf("\n %c",c);
    }
    Quelqu'un pourrait m'expliquer ou proposer un exemple en 3 lignes maximum ?

  2. #2
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut Re: getch - curses ou ncurses ?
    Citation Envoyé par zulul
    Mais qu'est ce qui ne va pas dans ce petit code ici ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <stdio.h>
    #include <ncurses.h>
     
    main() {
    char c;
    c=getch();
    printf("\n %c",c);
    }
    A la compile ça me sort ça :

    /tmp/ccyoc9HA.o(.text+0x21): In function `main':
    test.c: undefined reference to `stdscr'
    /tmp/ccyoc9HA.o(.text+0x26):test.c: undefined reference to `wgetch' << pourquoi wgetch ??
    Mais plutôt getchar a la place de getch() tu programme sous quel système d'exploitation?
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  3. #3
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    oops j'ai pas rafraichi avant... linux

    le getchar c'est pas une bonne idée, parceque je ne veux pas de "return". Seulement un appui sur la touche...

  4. #4
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut
    Citation Envoyé par zulul
    oops j'ai pas rafraichi avant... linux

    le getchar c'est pas une bonne idée, parceque je ne veux pas de "return". Seulement un appui sur la touche...
    Alors met int main (void) au debut de ton prog.
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  5. #5
    Membre habitué Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Points : 134
    Points
    134
    Par défaut Re: getch - curses ou ncurses ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include <stdio.h>
    #include <ncurses.h>
     
    int main (void)
    {
        char c;
        c=getch();
        printf ("\n%c",c);
     
        return (0);
    }
    Voilà normalement ce programme devrait marcher.
    Les élèves glandeurs c'est comme le linge, quand il fait beau ca sèche.

  6. #6
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    merci mais ça a pas trop l'air de marcher sous gcc, je retourne sur windoze

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Citation Envoyé par zulul
    merci mais ça a pas trop l'air de marcher sous gcc, je retourne sur windoze
    Il faudrait être plus explicite. Est-ce que cela ne marche pas où ca ne répond pas a ce tu souhaites faire ?
    Sinon dis clairement ce qui ne marche. A savoir si il s'agit d'une erreur de compilation avec gcc ou alors autre chose.


    bonne nuit,
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par benjiprog
    Citation Envoyé par zulul
    oops j'ai pas rafraichi avant... linux

    le getchar c'est pas une bonne idée, parceque je ne veux pas de "return". Seulement un appui sur la touche...
    Alors met int main (void) au debut de ton prog.
    Ok, mais quel rapport ?
    Pas de Wi-Fi à la maison : CPL

  9. #9
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Avec Dev-C++, il n'y a aucun problème parceque j'utilise la librairie la plus drôle de l'univers, à savoir conio.h mais quend je remonte sous linux et son gcc avec ncurses.h ou curses.h, peu importe en fait, ça me ressort toujours ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /tmp/ccyoc9HA.o(.text+0x21): In function `main': 
    test.c: undefined reference to `stdscr' 
    /tmp/ccyoc9HA.o(.text+0x26):test.c: undefined reference to `wgetch'
    pour la compile je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc [f.c] -o -Icurses [prg]
    C'est fatiguant à la fin et le man getch() n'apporte pratiquement aucune explication, je comprends pourquoi microsoft à perçé sur le marché, parcequ'on perd moins de temps en futilité. Avec linux, c'est toujours les années 60

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zulul
    pour la compile je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc [f.c] -o -Icurses [prg]
    <Hors-sujet>
    C'est pas -I, mais -l (L minuscule comme 'library')..
    </>
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Citation Envoyé par zulul
    C'est fatiguant à la fin et le man getch() n'apporte pratiquement aucune explication, je comprends pourquoi microsoft à perçé sur le marché, parcequ'on perd moins de temps en futilité. Avec linux, c'est toujours les années 60
    <HS>J'aurais dans ton cas plutot parler de rigueur que de "futilité" </HS>

  12. #12
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Que j'utilise ncurses ou curses avec ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include "stdio.h"
    #include "curses.h"
     
    void main() {
    char c;
    c=getch();
    printf(" \n %c",c);
    }
    j'ai maintenant un autre message d'erreur à la compile, avec -lncurses: # no newline at end of file // ce qui compile mais donne "segmentation fault" à l'exec

    Qu'est ce que cela signifie ?

  13. #13
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ca veut dire que tu n'as pas installé le package (n)curses-dev...

    --
    Jedaï

  14. #14
    En attente de confirmation mail
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 7
    Points
    7
    Par défaut
    j'ai trouvé comment ça marche mais ça utilise la fenetre curses... ce n'est toujours pas ce que je veux et on tire en ralonge pour un truc si simple, ce n'est pas possible d'en arriver là ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include "stdio.h"
    #include "ncurses.h"
     
    void main() {
    initscr();
    noecho();
    char c;
    c=getch();
    printw("\n %c",c);
    getch();
    endwin();
    }
    Quelqu'un a une alternative sans passer par le getchar ? Et sans passer par là :http://c.developpez.com/faq/c/?page=...CREEN_mode_raw

  15. #15
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
    #include<conio.h>
     
    int main(void)
    {
        char c;
        c=getch ();
        printf("%c", c);
        return 0;
    }

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    LoL le dépoussiérage de post...
    A mon avis, zulul a trouvé la solution à son problème au cours de... ces 5 dernières années.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jeroman Voir le message
    LoL le dépoussiérage de post...
    A mon avis, zulul a trouvé la solution à son problème au cours de... ces 5 dernières années.
    Ainsi qu'il a compris que:

    - les man pages étaient rébarbatives au début mais en réalité extrêmement bien structurée et pratiques si bien qu'il ne veut plus que ça...
    (sous windows il est d'ailleurs maintenant obligé de googler "man <cmd>" pour avoir une information rapide, claire, et concise)

    - la solution proposée là -> http://c.developpez.com/faq/?page=cl...CREEN_mode_raw était une des solutions possibles, pas plus mauvaise qu'une autre, et qu'il peut toujours la mettre dans un conio.c si c'est tout ce qu'il manque à son bonheur

    - que Curses est une lib magnifique

    - "linux et son GCC" sont forcément la référence, les manières de faire du C étant liées au fonctionnement de Unix

    (sans vouloir rentrer dans le troll bien sûr, mais ça me semblait important à préciser étant donné que ce sujet doit être beaucoup visionné par des débutants... inutile de les encourager à trouver que "les man pages c'est nuuuuul")

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Citation Envoyé par zulul Voir le message
    merci mais ça a pas trop l'air de marcher sous gcc, je retourne sur windoze
    D'une manière générale, en dehors de curses, tu lis « l'entrée standard » de ton processus. Ça ne signifie pas que celle-ci est directement reliée au clavier.

    Dans le cas présent, tu travailles dans un « terminal ». Il s'agit d'un terminal virtuel − probablement un x-term − mais ceux-ci sont à l'origine censés se trouver au bout d'une ligne et être bufferisés par un pilote sous-jacent. En mode canonique, entre autre chose, les données sont disponibles ligne par ligne, ce qui permet d'une part à l'utilisateur de corriger ses données avant de les envoyer et, d'autre part, de réduire notablement l'overhead que cela engendre au niveau du système.

    Autrement dit : si tu veux recevoir les caractères un par un pour pouvoir faire un « appui sur une touche », il faut d'abord demander au terminal de te les envoyer. Mais ça, bien sûr, c'est de la programmation système. Ce n'est pas spécifique au langage C.

    Si tu n'as pas envie de t'ennuyer à gérer ça dans le programme C, fais « stty -icanon » dans le terminal où tu travailles. Sinon, regardes du côté de termios.

Discussions similaires

  1. getch()
    Par zbooon dans le forum Réseau
    Réponses: 5
    Dernier message: 11/09/2005, 19h51
  2. Le buffer clavier avec cin, et getch()
    Par Info420 dans le forum SL & STL
    Réponses: 1
    Dernier message: 06/12/2004, 12h45
  3. conio.c
    Par teto dans le forum C
    Réponses: 4
    Dernier message: 31/01/2004, 17h40
  4. getch, wgetch...
    Par drKzs dans le forum C
    Réponses: 8
    Dernier message: 16/09/2003, 23h16
  5. getch() avec gcc
    Par Jorus dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/12/2002, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo