[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. 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
    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,
    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. 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...