Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec getchar

mon erreur !

    21 avril 2006 à 22:20:35

    salut
    j'ai un problème sur l'utilité deux fois le getchar , je n'arrive pas bien à assimiler le code ci dessous

    code c


    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
      char lettre =0;
     
      printf("entrez une lettre SVP\n");
      lettre = getchar();
      printf("tu as tape %c\n",lettre);
     
      printf("entrez une 2 lettre SVP\n");
      lettre = getchar();
      printf("tu as tape %c\n",lettre);
     
     
      system("PAUSE");     
      return 0;
    }
    Pourquoi ça plante pour le deuscième getchar , m@teo disait que ça marche pas pour scanf mais je ne sais pas pourquoi ça marche pas aussi pour getchar

    veuillez m'aider SVP je suis coincé pour continuer le cours des pendus

    zerotamsa
    merci beaucoup
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      21 avril 2006 à 22:24:06

      Getchar prend le premier caractaire dans le buffer.
      Donc si au premier tu lui mets "aa" bien il va prendre le premier "a" pour la premiere demande et le second pour la seconde.
      Mais si tu mets juste "a" au premier c'est pas a qui est dans le buffer mais a\n deux caractaire donc quoi qu'il arriver le second sera "zaper"
      tu peut faire un
      fflush (stdin);
      (je voit pas en quoi c'est mal !)
      • Partager sur Facebook
      • Partager sur Twitter
        21 avril 2006 à 22:34:30

        while(getchar() != '\n')
            ;


        Je suggère de se créer une fonction de saisie :

        /* type : fonction de saisie basique ; prend un caractère sur l'entrée standard puis vide le buffer */
        void type(char c)
        {
            c = getchar();
            while(getchar() != '\n')
                ;
        }


        ++.
        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2006 à 23:53:53

          salut;
          je vous remercie pour vos rèponses mais je n'arive pas à manipuler la fonction void type(char c):
          j'essai comme ça

          code c

          #include <stdio.h>
          #include <stdlib.h>
          void type(char c);
          int main(int argc, char *argv[])
          {
          printf(" %c",getchar());


          system("PAUSE");
          return 0;
          }
          void type(char c)
          {
          c = getchar();
          while(getchar() != '\n');
          printf(" %c",c);

          }

          veuillez m'aider por introduire une deuscième lettre SVP
          zerotamsa
          merci beaucoup
          • Partager sur Facebook
          • Partager sur Twitter
            21 avril 2006 à 23:58:21

            Citation : angelsafrania

            Getchar prend le premier caractaire dans le buffer.
            Donc si au premier tu lui mets "aa" bien il va prendre le premier "a" pour la premiere demande et le second pour la seconde.
            Mais si tu mets juste "a" au premier c'est pas a qui est dans le buffer mais a\n deux caractaire donc quoi qu'il arriver le second sera "zaper"
            tu peut faire un

            fflush (stdin);

            (je voit pas en quoi c'est mal !)


            Parce que ça n'a jamais existé. C'est tout. fflush(stdin) n'est censé rien faire de donné. C'est un comportement indéfini.
            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2006 à 0:14:18

              salut,
              j'ai compris ce que vous voulez dire pour l'utilité de getchar mais je n'arrive pas à comprendre comment utiliser le code fflush (stdin);
              car c'est nouveau pour moi et je ne l'ai pas rencontré dans les cours de mateo
              veuillez SVP m'expliquer de quoi il s'agie et comment il peut me résoudre mon problème de taper deusc caractères consicutifs
              merci beaucoup
              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2006 à 0:17:55

                Il ne peut pas résoudre ton problème car il n'a pas de comportemnet défini. A ne pas utiliser, c'est tout.

                Ce que tu veux c'est lire ligne par ligne donc utilise des chaînes et fgets() ou getchar() en boucle pour lire chaque caractère de la ligne. Voilà tout.
                • Partager sur Facebook
                • Partager sur Twitter
                  22 avril 2006 à 1:32:53

                  Citation : tamsamani

                  j'ai un problème sur l'utilité deux fois le getchar ,


                  Avant tout, il faut comprendre le fonctionnement de getchar() qui ne fait pas ce que tu crois.

                  Il faut savoir que getchar() se comporte comme fgetc(stdin) :

                  http://mapage.noos.fr/emdel/notes.htm#fgetc

                  Ensuite je te conseille de lire ces deux articles :

                  http://mapage.noos.fr/emdel/notes.htm#saisie
                  http://mapage.noos.fr/emdel/notes.htm#fichiers

                  pour apprendre à faire des entrées solides en C...

                  Citation : angelsafrania


                  tu peut faire un

                  fflush (stdin);


                  (je voit pas en quoi c'est mal !)


                  La norme ne définit l'effet de fflush() que sur les flux sortants. Le comportement sur les flux entrants est donc indéfini[1].

                  --------------------
                  [1] Dans la pratique, certains compilateurs sous DOS/Windows définissent le comportement de fflush(stdin), mais sous Linux, c'est sans effet et sur certaines versions, des cas de plantages ont été signalés. De toutes façon, un bonne maitrise des entrées rend ce genre de bidouille inutile.

                  http://mapage.noos.fr/emdel/notes.htm#saisie
                  http://mapage.noos.fr/emdel/notes.htm#fichiers

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    22 avril 2006 à 8:20:20

                    Si tu veux tout simplement afficher l'entrée sur sa sortie, fais une boucle :

                    int c;

                    while((c = getchar())!= EOF)
                        putchar(c);


                    Sinon, pour ma fonction type :

                    char c;

                    printf("%c", getchar());
                    printf("%c", type(c));
                    • Partager sur Facebook
                    • Partager sur Twitter

                    problème avec getchar

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown