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 :

Rôle de la fonction getch dans mon code


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Points : 53
    Points
    53
    Par défaut Rôle de la fonction getch dans mon code
    salut a tous, je debute grave sous c.voici un code
    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>
    void main()
    {
    float surface, perimetre, longueur, largeur;
    clrscr();
    printf ("Saisir la longueur: ");
    scanf ("%f",&longueur);
    printf ("\nSaisir la largeur: ");
    scanf ("%f",&largeur);
    perimetre=2*(longueur+largeur);
    surface=longueur*largeur;
    printf("\n\nle périmètre est %f et la surface est %f",perimetre,surface);
    getch();
    }
    ca marche bien.afin de mieux comprendre je le mets en commentaire et la, a l'execution du code Saisir la longueur: s'affiche, je saisis une valeur que je valide ensuite Saisir la largeur: s'affiche et je saisis une valeur après validation plus rien je retourne sur mon code source.
    en fait je veux comprendre pourquoi les autres messages dans les deux premier s'affiche alors que le message dans le dernier printf ne s'affiche pas quand je mets le en commentaire

    NB:J'ai lu quelques part que getchar renvoit un caractère isolé lu sur un clavier.
    Mais comprenez que pour un débutant c'est pas forcement évident de comprendre
    merci pour votre indulgence

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    C'est parce que le C est tellement rapide (c'est pas comme le java dsl) que ton oeil ne vois pas la fin de l'execution.

    en fait le getch() attend une entrée clavier (get un char sur l entrée standard quoi); ici ca te permet de faire une pause le temps que tu lises ton resultat.

    Par contre attention :
    prototype de main c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main( int argc, char** argv )
    /* ou bien */
    int main( void )
    mais pas l'horreur infame que tu as ecrit.

    de plus evites les float, prend plutot des double (c'est petit les float en fait)
    et scanf aussi, pour les raisons je t invite a faire une recherche sur le forum c'est bien mieux expliqué que je ne saurai le faire.

    bon ca va que tu debutes grave
    pas de pour cette fois

    bon courage

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je ne te conseil pas d'utiliser getch car c'est spécifique à Windows et donc non portable. Même si tu ne fait pas encore dans la portabilité, autant prendre les bonnes habitudes tout de suite

    Je te conseil plutôt d'utiliser getchar qui fait en gros la même chose

    Aussi, à la fin de ton main (quand il sera en règle par rapport aux bons prototypes fournis par BainE), fait au choix un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    return 0;
     
    /* ou un */
     
    return EXIT_SUCCESS;
     
    /* si tu inclus stdlib.h */
    Tout ceci car main retourne un int. La seconde méthode permet de rester portable car la valeur de retour, même si c'est rare, peut changer suivant le système d'exploitation et vu que c'est une valeur qu'utilise en générale l'ordonnanceur des processus pour finir correctement le programme, c'est assez important on va dire

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Je comprends maintenant que marque une pause pour que je puisse lire mon resultat et attend une validation sur entrée pour executer le code qui suit.
    mais pourquoi sans le le message dans le premier printf "saisir la longueur" apparait quand même et fonctionne comme s'il attend que je saisisse un nombre ensuite appuyer sur la touche entrée pour executer le reste du code
    merci pour les autres explication(sur le main c'est pigé)

  5. #5
    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 manguigs Voir le message
    Je comprends maintenant que marque une pause pour que je puisse lire mon resultat et attend une validation sur entrée pour executer le code qui suit.
    mais pourquoi sans le le message dans le premier printf "saisir la longueur" apparait quand même et fonctionne comme s'il attend que je saisisse un nombre ensuite appuyer sur la touche entrée pour executer le reste du code
    merci pour les autres explication(sur le main c'est pigé)
    Dans la plupart des cas, scanf() laisser trainer un caractère '\n' dans le flux entrant (stdin) , ce qui rend l'appel suivant de getchar() non bloquant (donc pas de pause).

    un moyen simple est de placer un getchar() après chaque appel à scanf(), ça nettoie...

    Oui, le C, c'est pas simple... Ce n'est pas un langage de débutant en programmation. Trop de détails sordides de ce type...

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut slt slt slt
    "getch" ne peut pas faire l'affichage puisqu'elle lu un seul caractère.
    si tu veut lutiliser, il faut le mettre dans une boucle itérative (for, while)

  7. #7
    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 snatch2008 Voir le message
    "getch" ne peut pas faire l'affichage puisqu'elle lu un seul caractère.
    Quel rapport ? et getche(), il faut quoi ?
    si tu veut lutiliser, il faut le mettre dans une boucle itérative (for, while)
    Genre ceinture et bretelle. Tu mets 2 parenthèses à tes fonctions ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       printf (("Hello world\n"));
    Des fois qu'y en ait une qui pète...

    T'as fumé un truc ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 8
    Points
    8
    Par défaut getch
    Salut les gars...j'ai un soucis
    Voila j'aimerai utiliser le getch() pour que mon programme me demande de saisir une autre lettre et de vérifier si elle est une voyelle ou une consonne??....j'ai déjà essayé avec les do...while et le while mais rien à faire ça marche pas.
    Pouvez vous m'aider s'il vous plait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
     
    int main()
    {
        char lettre,o;
          printf("saisire une lettre: ");
          scanf("%c",&lettre);
            if (lettre=='a'&&'o'&&'e'&&'i'&&'u'&&'y')
        {
             printf("La lettre %c est une voyelles ",lettre);
        }
        else
        {
            printf("La lettre %c est une consonne \n",lettre);
        }
        return 0;
    }

  9. #9
    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 ablaye09 Voir le message
    Voila j'aimerai utiliser le getch() pour que mon programme me demande de saisir une autre lettre et de vérifier si elle est une voyelle ou une consonne??....j'ai déjà essayé avec les do...while et le while mais rien à faire ça marche pas.
    Pouvez vous m'aider s'il vous plait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
     
     
    int main()
    {
        char lettre,o;
          printf("saisire une lettre: ");
          scanf("%c",&lettre);
            if (lettre=='a'&&'o'&&'e'&&'i'&&'u'&&'y')
        {
             printf("La lettre %c est une voyelles ",lettre);
        }
        else
        {
            printf("La lettre %c est une consonne \n",lettre);
        }
        return 0;
    }
    Il faut savoir que getch() n'est pas une fonction standard du C ... De même que <conio.h> n'est pas un header standard ...

    Le mécanisme pour savoir si une lettre est un voyelle est faux
    1 - && = ET alors qu'il faudrait un OU (||).
    2 - Il faut refaire le test pour chaque valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (lettre=='a' || lettre=='o' /* etc/ */)
    3 - Il y a surement une manière plus simple avec une fonction is*(), mais comme je n'ai pas codé de C depuis près de 10 ans, je ne m'en souviens plus ...

    Et pour le fun, pas de 'e' à "saisir" et pas de 's' à "une voyelle" ... Oui, je sais, l'orthographe est la science des ânes, mais moi, j'aime bien les ânes ...

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    en effet oui, la c'est beaucoup mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (lettre=='a'|| lettre=='o'|| lettre=='e'|| lettre=='i'|| lettre=='u'|| lettre=='y')

Discussions similaires

  1. Fonction ROUND dans mon code
    Par bibi28 dans le forum Access
    Réponses: 8
    Dernier message: 06/08/2014, 16h33
  2. fonction explode() ne fonctionne pas dans mon code
    Par Invité dans le forum Langage
    Réponses: 12
    Dernier message: 08/02/2013, 10h34
  3. Aide pour disséquer deux fonctions dans mon code
    Par joomoo79 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/11/2008, 16h53
  4. Réponses: 4
    Dernier message: 30/05/2007, 18h05
  5. [langage] algo de bissection dans mon code
    Par killy dans le forum Langage
    Réponses: 5
    Dernier message: 19/01/2004, 18h35

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