[C] scanf et caractères

je débutte en C et j'ai un problème sur un programme
j'aimerai que l'utilisateur puisse saisir 2 caractères
le programme suivant ne marche pas je ne comprend pas pourquoi :o(

#include<stdio.h>

main()
{
      char caractere_1,caractere_2;
     
      printf("caractere_1 ? "); 
      scanf("%c",&caractere_1);
       
      printf("caractere_2 ? "); 
      scanf("%c",&caractere_2);
      
      printf("\n\n --> %c %c", caractere_1, caractere_2);
      getchar();getchar();

}


merci de votre aide

6 réponses

  1. Contributeur
    Bonjour!

    que t'affiche t il? y'a t il un message d'erreur?
    1. il n'affiche aucun message d'erreur
      je peux entrer le caractère1 normalement ( "caractère_1 ?" s'affiche à l'écran )
      puis il affiche "caractère_2 ?"
      jusque là tout va bien
      mais ensuite le programme ne prend pas en compte le 2ème scanf et passe directement à la dernière instruction ( printf )
      ( " --> [ici le premier caractère entré]" s'affiche )

      au final, j'ai à l'écran ( en prenant caractère1=a par exemple )

      caractère_1 ? a
      caractère_2 ?
      
       --> a 
      1. c'est parce que tu a unretour chariot dans le buffer...
        (le char '\n')
        peut etre qu'en faisant scanf("%c\n");
        ca ira mieux, sinon fais un autre scanf ala suite pour 'purger' le buffer, mais c'est pas tres propre
        1. mais c facil , lol
        2. Contributeur
          Non, pas scanf("%c\n");
      2. Contributeur
        ou, après ton premier scanf, tu mets
        fflush (stdin); qui vide le buffer d'entrée...
        1. Contributeur
          Non, fflush(stdin) a un comportement indéterminé.
        2. Contributeur
          Comme dit fiddy,
          fflush(stdin)
          c'est mauvais: pas défini par le standard, mais populaire à cause de l'implémentation de Windows, qui n'est évidemment pas cross-platform.
          C'est pas bien de prendre des habitudes quand on bosse avec un système de m*rde hein...
      3. Contributeur
        Bon, puisque quelqu'un a remonté le topic, et qu'aucune réponse n'est correcte, j'apporte ma contribution.

        Tout d'abord, le seul prototype de main() sans argument valable est : int main (void).

        Le main() renvoie un int ; donc il faut mettre : return 0; en fin de main() pour dire que tout s'est bien déroulé.

        Sinon concernant le problème, il faut purger le buffer clavier entre les 2 scanf(). fflush(stdin) comme préconisé est faux. Le fflush() a un comportement indéterminé sur stdin. Donc fflush(stdin) est à proscrire.

        Il suffit de se faire une fonction :
        void videBuffer(void) {
             int c;
             while ( (c=getchar()) != '\n' && c != EOF );
        }
        

        Et d'appeler videBuffer() après chaque scanf("%c",...);

        Cdlt,