[C] scanf et caractères
3.
-
ElementW Messages postés 5690 Statut Contributeur -
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>
merci de votre aide
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:
- Scanf caractere c
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Caractere vide - Guide
- Caractere speciaux mac - Guide
6 réponses
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
(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
madeinchina
mais c facil , lol
fiddy
Messages postés
11653
Statut
Contributeur
1 847
Non, pas scanf("%c\n");
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 :
Et d'appeler videBuffer() après chaque scanf("%c",...);
Cdlt,
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,
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 )
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ou, après ton premier scanf, tu mets
fflush (stdin); qui vide le buffer d'entrée...
fflush (stdin); qui vide le buffer d'entrée...