Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme tout bete sur 6 ligne de code

Probleme avec le scanf

    6 octobre 2007 à 20:17:31

    Bonsoir,
    Je viens de me remettre au c et j'ai un souci voici mon code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main()
    4. {
    5.     int i=0;
    6.     char caract;
    7.     char txt[100];
    8.     scanf("%c",&caract);
    9.     printf("1)Vous avez tapez :%c \n",caract);
    10.     while(caract != '$')
    11.     {
    12.          txt[i] = caract;
    13.          scanf("%c",&caract);
    14.          printf("2)Vous avez tapez :%c \n",caract);
    15.     }
    16. }


    Je voudrais tapez un 1er caractere et que le prog mette, vous avez tapez ça. ca s'arrete avec le caractere de fin $.
    Hors des que je tape le 1er par exemple b j'obtiens

    b
    1)Vous avez tapez :b
    2)Vous avez tapez :


    Normalement il ne devrait pas s'arréter avant "2)Vous avez tapez :" car il y a un scanf juste au dessus?
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      6 octobre 2007 à 20:22:46

      Il ne s'arrête pas car les caractères \n n'est pas consommé, il faut donc le consommer pour ça il y a la forme de scanf suivante:

      scanf("%c%*c",&ta_varaible); à placer dans le premiere scanf. Mais, il est préférable d'utiliser une fonction plus simple comme fgets pour les saisies ?

      Saisies sécurisées
      • Partager sur Facebook
      • Partager sur Twitter
        6 octobre 2007 à 20:26:41

        Citation

        Mais, il est préférable d'utiliser une fonction plus simple comme fgets pour les saisies :

        Saisies sécurisées



        +1
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          6 octobre 2007 à 20:33:28

          Utilise des fgets
          • Partager sur Facebook
          • Partager sur Twitter
            6 octobre 2007 à 20:38:19

            Ce que je ne comprends pas c'est que si je fait:
            1. #include <stdio.h>
            2. #include <stdlib.h>
            3. int main()
            4. {
            5.     int i=0;
            6.     char caract;
            7.     char txt[100];
            8.    scanf("%c",&caract);
            9.    printf("1)Vous avez tapez:%c",caract);
            10.    scanf("%c",&caract);
            11.    printf("2)Vous avez tapez:%c",caract);
            12.    system("pause");
            13.    return(0);
            14. }


            Il saute le deuxieme scanf, alors qu il n y a pas de \n
            le resultat est
            b
            1)Vous avez tapez:b2)Vous avez tapez:
            Appuyez sur une touche pour continuer...
            • Partager sur Facebook
            • Partager sur Twitter
              6 octobre 2007 à 20:40:07

              Mais si il y est ton caractère \n(enfin j'espère que c'est bien celui là) car dès lors que tu fais entrer tu introduits le caractère saut de ligne qui est conservé dans le buffer (si je me trompe pas) et donc à la prochaine demande de saisie, il est directement utilisé d'où ce saut de scanf.
              • Partager sur Facebook
              • Partager sur Twitter
                6 octobre 2007 à 20:57:08

                Citation : aurek

                Mais si il y est ton caractère \n(enfin j'espère que c'est bien celui là) car dès lors que tu fais entrer tu introduits le caractère saut de ligne qui est conservé dans le buffer (si je me trompe pas) et donc à la prochaine demande de saisie, il est directement utilisé d'où ce saut de scanf.



                Tu ne te trompes pas. Si tu veux pouvoir utiliser scanf() correctement Takinelinfo, il faut que tu vides le tampon du flux d'entrée (stdin) avant chaque utilisation. Si le tampon n'est pas vide, la fonction prend ce qu'il contient et considère que c'est ce que l'utilisateur a rentré comme caractères.
                • Partager sur Facebook
                • Partager sur Twitter
                  6 octobre 2007 à 20:58:33

                  et comment dois je faire pour vider le tampon a chaque fois stp?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 octobre 2007 à 21:01:36

                    Et ben tu prends tes petits yeux et tu lis les messages que des gens pensent à mettre pour toi. (dsl mais faut pas pousser)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 octobre 2007 à 21:10:04

                      Tu cherches un peu au lieu d'attendre que ça te tombe tout cuit dans l'assiette.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 octobre 2007 à 21:19:24

                        C'est vrai que j'aurais pu cherhcer un peu. :-° , je voulais vite voir le match.
                        Je connais flush et endl mais je pense que ça ne marche qu'en c++, je vais tester et aller faire qq recherches.
                        Merci a vous en tout cas.

                        Bon j'ai trouver fflush(stdin); mais apparamment tout le monde n'est pas d'accord.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 octobre 2007 à 6:53:05

                          le mieux est d'utiliser fgets comme te la conseillé aurek.

                          Avec ça, tout le monde est d'accord, c'est portable donc pas de soucis. Comme disent certains, scanf c'est le mal.

                          Sinon la fonction pour vider le buffer (en C) est flush.
                          De plus endl (en C++) va a la ligne et vide le buffre, mais seulement pour la sortie (cout par ex). Ca ne marche pas avec cin.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 octobre 2007 à 6:59:19

                            fflush() ne s'applique *pas* aux flots en entrée, c'est tout.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Probleme tout bete sur 6 ligne de code

                            × 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