Question sur la fonction getchar et le switch
Résolu
enigman0001
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
enigman0001 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
enigman0001 Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
bonjour
j'ai suis actuellement des cours de programmation en c, et j'ai été amené récemment a créer une fonction lire_caractere() pour récupérer un caractère, pour quoi faire ça au lieu d'utiliser un simple scanf ?
parce que j'ai besoin que mon caractère soit en majuscule, alors même si l’utilisateur vas taper une caractère en minuscule la fonction vas se charger de le transformer en majuscule, de plus c'est une sécurité si jamais l'utilisateur tape plusieurs lettres, la fonction vas récupérer que la première lettre tapée et " vider le buffet " comme on dit, je vous envoie le code pour que vous puissiez mieux savoir de quoi il s'agit.
mais voila , le problème est que ma fonction ne fonctionne pas correctement quand je l'utilise dans un switch, elle ne lit pas le caractère, qu'alors que si je la met au début de mon programme elle fonctionne très bien, et je n'arrive pas a comprendre pour quoi !
ce code marche :
voila se qu'il nous donne :

et maintenant, on utilise notre fonction lire_caractere() dans un switch :
et voila se qu'il nous donne :

la lettre n’apparaît pas !, ça parait complètement illogique
si quelqu'un sait d'ou viens le problème , cela m'aiderais beaucoup
merci de vos réponse.
j'ai suis actuellement des cours de programmation en c, et j'ai été amené récemment a créer une fonction lire_caractere() pour récupérer un caractère, pour quoi faire ça au lieu d'utiliser un simple scanf ?
parce que j'ai besoin que mon caractère soit en majuscule, alors même si l’utilisateur vas taper une caractère en minuscule la fonction vas se charger de le transformer en majuscule, de plus c'est une sécurité si jamais l'utilisateur tape plusieurs lettres, la fonction vas récupérer que la première lettre tapée et " vider le buffet " comme on dit, je vous envoie le code pour que vous puissiez mieux savoir de quoi il s'agit.
mais voila , le problème est que ma fonction ne fonctionne pas correctement quand je l'utilise dans un switch, elle ne lit pas le caractère, qu'alors que si je la met au début de mon programme elle fonctionne très bien, et je n'arrive pas a comprendre pour quoi !
ce code marche :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include "les prototypes.h"
char lire_caractere();
int main()
{
char lettre = 0;
printf("entrez une lettre :");
lettre = lire_caractere();
printf("\nvoici la lettre : %c", lettre);
return 0;
}
char lire_caractere()
{
char caractere = 0;
caractere = getchar();
caractere = toupper(caractere);
while(getchar() != '\n');
return caractere;
}
voila se qu'il nous donne :

et maintenant, on utilise notre fonction lire_caractere() dans un switch :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#include "les prototypes.h"
char lire_caractere();
int main()
{
char lettre = 0;
int numero = 0;
printf("tapez 1\n");
scanf("%d", &numero);
switch (numero)
{
case 1:
printf("tapez une lzttre :");
lettre = lire_caractere();
printf("\nvoici la lettre : %c", lettre);
break;
default :
printf("vous n'avez rien tape");
break;
}
return 0;
}
char lire_caractere()
{
char caractere = 0;
caractere = getchar();
caractere = toupper(caractere);
while(getchar() != '\n');
return caractere;
}
et voila se qu'il nous donne :

la lettre n’apparaît pas !, ça parait complètement illogique
si quelqu'un sait d'ou viens le problème , cela m'aiderais beaucoup
merci de vos réponse.
A voir également:
- Question sur la fonction getchar et le switch
- Fonction si et - Guide
- Android switch - Accueil - Android
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
- Logiciel switch - Télécharger - Conversion & Extraction
4 réponses
Bonjour enigman0001,
C'est parce que la lettre en en fait « \n »
Remplace :
Par :
C'est parce que la lettre en en fait « \n »
Remplace :
caractere = getchar();
Par :
getchar(); caractere = getchar();
merci beaucoup felice, ta réponse m'a beaucoup aidé
mais je suis coméme curieux d'en savoir plus.
si sa ne te dérange pas peut tu m'expliquer en détaille quel était le problème exactement et quesque ça change quand je remplace
par
mais je suis coméme curieux d'en savoir plus.
si sa ne te dérange pas peut tu m'expliquer en détaille quel était le problème exactement et quesque ça change quand je remplace
caractere = getchar();
par
getchar();
caractere = getchar();
Ça vient de la fonction « scan » utilisé avant, celui-ci ne vide pas le tampon.
Donc quand tu fais entrée le caractère « \n » reste dans le tampon.
Ainsi quand tu fais un premier « getchar(); » il récupère ce caractère « \n » et le tampon devient vide.
Après le second récupère bien ton caractère :-).
Donc quand tu fais entrée le caractère « \n » reste dans le tampon.
Ainsi quand tu fais un premier « getchar(); » il récupère ce caractère « \n » et le tampon devient vide.
Après le second récupère bien ton caractère :-).