[C] scanf et caractères

3. -  
ElementW Messages postés 5690 Statut Contributeur -
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
A voir également:

6 réponses

Timon1102 Messages postés 354 Statut Membre 109
 
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
madeinchina
 
mais c facil , lol
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Non, pas scanf("%c\n");
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
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
maily Messages postés 7560 Statut Contributeur 453
 
Bonjour!

que t'affiche t il? y'a t il un message d'erreur?
0
3.
 
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 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
3.
 
ca marche avec le "fflush(stdin);" ...
merci beaucoup ^^
0
maily Messages postés 7560 Statut Contributeur 453
 
ou, après ton premier scanf, tu mets
fflush (stdin); qui vide le buffer d'entrée...
-1
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Non, fflush(stdin) a un comportement indéterminé.
0
ElementW Messages postés 5690 Statut Contributeur 1 224
 
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...
0