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 :

debutant: pb avec getch


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Par défaut debutant: pb avec getch
    Bonjour,
    je commence en c, et j'ai installé gcc sous ubuntu. Suite à un tutorial présent sur le site j'éssaye de refaire le programme décris


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
     
    int main()
     
    {
     
     int i;
     i=70;
     
     printf("la valeure de i est %d\n",i);
     getch();
     return(0);
    }
    l'érreur suivante m'est retourné lorsque je compile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    /tmp/ccKHmcCr.o(.text+0x11): In function `main':
    : undefined reference to `getch'
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380

  3. #3
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    La bibliothèque <conio> contient une fonction du nom getch qui fournit immédiatement le prochain caractère entré au clavier.
    tu dois donc ajouter en debut de ton code
    La fonction getch n'est pas compatible avec ANSI-C et elle peut seulement être utilisée sous MS-DOS.
    getchar(qui se trouve dans stdio) lit les données de la zone tampon de stdin et fournit les données seulement après confirmation par 'Enter'.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par afrikha
    La bibliothèque <conio> contient une fonction du nom getch qui fournit immédiatement le prochain caractère entré au clavier.
    tu dois donc ajouter en debut de ton code
    La fonction getch n'est pas compatible avec ANSI-C et elle peut seulement être utilisée sous MS-DOS.
    getchar(qui se trouve dans stdio) lit les données de la zone tampon de stdin et fournit les données seulement après confirmation par 'Enter'.
    On peut utiliser getch sous Linux avec curses.
    Voir le lien que j'ai donné plus haut.

  5. #5
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    On peut utiliser getch sous Linux avec curses.
    Voir le lien que j'ai donné plus haut
    c'est vrai
    j'ai mal lu,j'ai pas vu qu'il etait sous linux.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Par défaut
    j'ai inséré la ligne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <curses.h>
    mais a la compilation j'ai

    nombre.c:2:20: curses.h : Aucun fichier ou répertoire de ce type

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: debutant: pb avec getch
    Citation Envoyé par richton95
    je commence en c, et j'ai installé gcc sous ubuntu. Suite à un tutorial présent sur le site j'éssaye de refaire le programme décris
    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>
     
    int main()
    {
     int i;
     i=70;
     
     printf("la valeure de i est %d\n",i);
     getch();
     return(0);
    }
    Un tutorel qui commence par utiliser des fonctions non standard est bon pour la casse.
    l'érreur suivante m'est retourné lorsque je compile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    /tmp/ccKHmcCr.o(.text+0x11): In function `main':
    : undefined reference to `getch'
    La preuve !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par afrikha
    La bibliothèque <conio> contient une fonction du nom <...>
    <conio.h> sous ubuntu (une sympathique distribution de Linux), c'est même pas la peine d'y penser !

  9. #9
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Un tutorel qui commence par utiliser des fonctions non standard est bon pour la casse.
    donc tu confirmes qu'il vaut mieux utiliser getchar ?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par afrikha
    Citation Envoyé par Emmanuel Delahaye
    Un tutorel qui commence par utiliser des fonctions non standard est bon pour la casse.
    donc tu confirmes qu'il vaut mieux utiliser getchar ?
    Je sais pas. C'est pour faire quoi ?

  11. #11
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par afrikha
    Citation Envoyé par Emmanuel Delahaye
    Un tutorel qui commence par utiliser des fonctions non standard est bon pour la casse.
    donc tu confirmes qu'il vaut mieux utiliser getchar ?
    Je sais pas. C'est pour faire quoi ?
    ben je sais pas,apparemment c'est pour marquer une pause dans ce programme.(il faut bien sùr vider le buffer avant),et il ne peut pas non plus utiliser
    non?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par afrikha
    donc tu confirmes qu'il vaut mieux utiliser getchar ?
    Je sais pas. C'est pour faire quoi ?
    ben je sais pas,apparemment c'est pour marquer une pause dans ce programme.(il faut bien sùr vider le buffer avant),
    getchar() ça peut aller si effectivement, le buffer de stdin est vide. Mais si on a utilisé correctement fgets() avant, pas de problème, il est vide ! Evidemment avec scanf() c'est une autre histoire !
    et il ne peut pas non plus utiliser
    non?
    Gni ? Sous Linux ? Je ne sais pas ce que veux dire "CLS", mais ça m'étonnerait que ça fasse une pause... Sous DOS, ça devrait effacer l'écran...

  13. #13
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Gni ? Sous Linux ? Je ne sais pas ce que veux dire "CLS", mais ça m'étonnerait que ça fasse une pause... Sous DOS, ça devrait effacer l'écran...
    pardon,erreur d'inattention
    je voulais dire
    désolé


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par afrikha
    je voulais dire
    Même punition. Qui te dit que la commande "PAUSE" a un sens sous Linux ?

    system() est un example parfait de fonction standard non portable. (Plus exactement, dont l'effet est non portable)

  15. #15
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    ben oui c'est ce que je dis dans ce post!!
    Citation Envoyé par afrikha
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par afrikha
    Citation Envoyé par Emmanuel Delahaye
    Un tutorel qui commence par utiliser des fonctions non standard est bon pour la casse.
    donc tu confirmes qu'il vaut mieux utiliser getchar ?
    Je sais pas. C'est pour faire quoi ?
    ben je sais pas,apparemment c'est pour marquer une pause dans ce programme.(il faut bien sùr vider le buffer avant),et il ne peut pas non plus utiliser
    non?


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  16. #16
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est quand même pas de la faute de l'apprenti programmeur s'il n'y a rien de potable dans le standard...

    Pour marquer une pause "standard", tu n'as pas le choix, il faut utiliser une fonction qui exige un appui sur Enter.
    Parmi lesquelles, getchar() devrait marcher, mais il faut être sur que le buffer soit vidé avant, sinon le programme n'attendra pas.(Et malheureusement, la fonction pour cela "fflush(stdin)" ne marche que sur les vrais OS.

    Si getchar() ne suffit pas, tu crées un buffer bidon de dix char et tu fais un fgets(buffer, 10, stdin); cela devrait marcher...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par afrikha
    ben oui c'est ce que je dis dans ce post!!
    et il ne peut pas non plus utiliser
    non?
    Oups, désolé. Quand il y a trop de négations, je m'y perd. Pas assez de neurones en état de marche...

  18. #18
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Oups, désolé. Quand il y a trop de négations, je m'y perd. Pas assez de neurones en état de marche.
    y'a pas de mal;ça arrive à tout le monde


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  19. #19
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Citation Envoyé par Médinoc
    C'est quand même pas de la faute de l'apprenti programmeur s'il n'y a rien de potable dans le standard...

    Pour marquer une pause "standard", tu n'as pas le choix, il faut utiliser une fonction qui exige un appui sur Enter.
    Parmi lesquelles, getchar() devrait marcher, mais il faut être sur que le buffer soit vidé avant, sinon le programme n'attendra pas.(Et malheureusement, la fonction pour cela "fflush(stdin)" ne marche que sur les vrais OS.

    Si getchar() ne suffit pas, tu crées un buffer bidon de dix char et tu fais un fgets(buffer, 10, stdin); cela devrait marcher...
    que veux-tu dire par les "vrais" OS??

    voici la mèthode pour vider le buffer (extraite de la FAQ):
    La méthode la plus sûre pour vider le buffer clavier consiste à consommer tout les caractères présents dans ce buffer jusqu'à ce qu'il soit vide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <stdio.h>
     int c;
     while ((c = getchar()) != '\n' && c != EOF);
     /* mange le tampon */
    N.B. : certains compilateurs offre une extension proposant une méthode 'simple' pour vider ce buffer clavier en utilisant la fonction fflush.

    Toutefois la norme n'indiquant le fonctionnement de fflush que sur des flux sortant, cette méthode n'est pas standard et peut conduire à des résultats indéfinis, il convient donc de l'éviter.


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    C'est quand même pas de la faute de l'apprenti programmeur s'il n'y a rien de potable dans le standard...
    Gni ? Et getchar(), ça va pas ?

    De plus, je n'ai pas incriminé 'l'apprenti programmeur', mais le rédacteur du tutoriel qui commet une faute en parlant de fonctions non standard à un débutant... (de plus, apparament, sans préciser qu'elles sont non standard)
    (Et malheureusement, la fonction pour cela "fflush(stdin)" ne marche que sur les vrais OS.°
    La norme dit que fflush() n'est défini que pour les flux sortants. Quel est donc ce fameux 'vrai OS' qui supporte des dérogations à la norme ? Et quel intérêt, puisque ce n'est pas conforme à la norme (donc, non portable).

Discussions similaires

  1. debut laborieux avec DbExperss
    Par Benbleu dans le forum Bases de données
    Réponses: 8
    Dernier message: 17/11/2011, 11h14
  2. [DEBUTANT] Probleme avec glortho
    Par barthelv dans le forum OpenGL
    Réponses: 12
    Dernier message: 23/11/2004, 14h21
  3. [DEBUTANT] probleme avec split ?
    Par matN59 dans le forum ASP
    Réponses: 6
    Dernier message: 23/10/2004, 15h47
  4. Réponses: 2
    Dernier message: 31/08/2004, 11h45
  5. [Debutant] Executable avec Jbuilder
    Par Stef784ever dans le forum JBuilder
    Réponses: 3
    Dernier message: 16/05/2003, 14h40

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